【ArcGIS自定义脚本工具】绘图:MODIS数据编号对应月份图

一、功能介绍
该脚本以MODIS数据编号为y轴,以编号对应的月份为x轴,绘制散点图。利用这个脚本可以辅助分析MODIS数据的月变化。
【ArcGIS自定义脚本工具】绘图:MODIS数据编号对应月份图_第1张图片

二、脚本代码
运行该脚本需要在Arcgis对应的python目录(默认为C:\Python27\ArcGIS10.2\Lib\site-packages)下安装第三方库Matplotlib,本文使用的版本为matplotlib-2.1.0。

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

import warnings
import time
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
import matplotlib.cbook
import arcpy

warnings.filterwarnings("ignore", category=matplotlib.cbook.mplDeprecation)
warnings.filterwarnings("ignore")

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False


class NumCvt:
    def __init__(self, time_res, year):
        """
        :param time_res: 
        :param year: 
        """
        self.year = year
        self.time_res = time_res
        self.list_num = []
        self.t_0 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        self.t_1 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    def judge_year(self):
        if self.year % 4 == 0:
            return 1
        elif self.year % 4 != 0:
            return 0

    def cre_list_num(self):
        if self.judge_year():
            self.list_num = list(range(1, 366, self.time_res))
        else:
            self.list_num = list(range(1, 365, self.time_res))

    def cvt(self):
        list_month = []
        if self.judge_year() == 0:
            t = self.t_0[:]
        else:
            t = self.t_1[:]
        for num in self.list_num:
            month = 1
            while True:
                if num - sum(t[:month]) <= 0:
                    list_month.append(month)
                    break
                else:
                    month += 1
                    continue
        return list_month


time_resolution = arcpy.GetParameterAsText(0)
year = arcpy.GetParameterAsText(1)
x_name = arcpy.GetParameterAsText(2)
y_name = arcpy.GetParameterAsText(3)

start_time = time.time()
cvt1 = NumCvt(time_res=int(time_resolution), year=int(year))
cvt1.cre_list_num()
x_value = cvt1.list_num
y_value = cvt1.cvt()
l = plt.scatter(y_value, x_value, label='type', s=5)
ax = plt.gca()
x_major_locator = MultipleLocator(1)
ax.xaxis.set_major_locator(x_major_locator)
for x, y in zip(y_value, x_value):
    plt.text(x+0.1, y, y, ha='left', va='center', fontsize=6)
plt.xlabel(x_name, fontsize=10)
plt.ylabel(y_name, fontsize=10)
plt.show()

三、工具参数
【ArcGIS自定义脚本工具】绘图:MODIS数据编号对应月份图_第2张图片
【ArcGIS自定义脚本工具】绘图:MODIS数据编号对应月份图_第3张图片

四、工具界面
【ArcGIS自定义脚本工具】绘图:MODIS数据编号对应月份图_第4张图片
脚本运行时的界面如下所示:
【ArcGIS自定义脚本工具】绘图:MODIS数据编号对应月份图_第5张图片

你可能感兴趣的:(ArcGIS自定义脚本编程)