IDL:如何对地表温度数据进行分组统计并生成温度分布直方图?

01 要求

获取一张地表温度数据,对其进行分组统计,并制作间隔为3K的温度分布频数和频率直方图。

02 下载地表温度数据

首先需要下载地表温度数据,我想了几种产品,一个是MODIS的MOD11A2产品,一个是Landsat8/9 的C2,还有sentinel3的SLSTR传感器提供的地表温度数据,当然后面查阅发现还有VIIRS、ASTER(Terra卫星)等等,这里不展开说明。

由于MODIS的产品下载即可使用,无需过多的预处理,这里从NASA下载MOD11A2产品吧。

2.1 检索

在这里插入图片描述

在这里插入图片描述

好吧,下载的居然还是HDF文件,为了不偏题(没时间),这里就不展开说明如何得到tiff文件。

本来是打算从头到尾讲述一下,这么一下工作量大了些。

如下是得到的tiff文件:

在这里插入图片描述

03 直方图绘制

3.1 IDL代码

说明都在注释中,如下:

; 该程序用于计算某幅影像中各个分组下的频率/频数以及分布直方图
pro histogram_plot
    img_path = 'E:\FeaturesTargets\uniform\LST\LST_2000_03.tiff'  ; 输入路径
    img = read_tiff(img_path)  ; 读取栅格矩阵, float[139, 184]
    ; 设置无效值为nan, 此处-65535.000为无效值
    img[where(img eq -65535.000)] = !values.f_nan
    img_min = min(img, /nan)  ; 取栅格矩阵的最小值, /nan表示忽略nan
    img_max = max(img, /nan)  ; 取栅格矩阵的最大值, /nan同上
    ; 获取各个范围的频数分布(实际上对于这种不是特别特殊的图建议使用excel绘制会快很多)
    hist = histogram(img, binsize=3.0, /nan, min=img_min, max=img_max)  ; 计算各个范围的频数
    x_range = findgen(ceil((img_max - img_min) / 3)) * 3 + img_min  ; 得到x范围
    fig = barplot(x_range, hist, /histogram, xrange=[img_min, img_max], xtickinterval=3.0, $
        xtitle='温度范围', ytitle='温度(频数)', title='某地温度频数分布直方图', font_name='Microsoft Yahei', font_size=14)
    fig.save, 'D:\Objects\JuniorSpringTerm\GeoMathAnalysis\Chapter2\histogram1.png'
    
    ; 上述是频数直方图绘制, 下面是频率直方图绘制, 频率等于频数乘以总数
    valid_sum = total(~finite(img, /nan))  ; 或者total(hist)
    hist = hist / valid_sum
    fig = barplot(x_range, hist, /histogram, xrange=[img_min, img_max], xtickinterval=3.0, $
        xtitle='温度范围', ytitle='温度(频数)', title='某地温度频率分布直方图', font_name='Microsoft Yahei', font_size=14)
    fig.save, 'D:\Objects\JuniorSpringTerm\GeoMathAnalysis\Chapter2\histogram2.png'
end

其中涉及的两个比较关键的函数为histogrambarplot

对于histogram,其是计算各个分组下的频数(以一维数组形式)。img表示传入的栅格矩阵(数组),binsize表示分组间隔,min表示进行分组的最小值,max表示进行分组的最大值,数组中不在最大值和最小值范围之间的数不纳入计算频数(当然你也可以不传入,默认会计算传入数组的最大最小值)。

对于barplot,这就是进行条形图及其变种图的绘制,这里计算到这里你也可以大可不用代码进行绘制如果没有自动化和大批量的要求的话。x_range表示传入的X,hist表示传入的Y,/histogram表示按照直方图形式绘制,xrange表示x轴绘制的最大最小值范围,xtickinterval表示X轴各个数值标记或者说绘制的间隔,xtitle表示X轴标题,ytitle表示Y轴标题,title表示图主标题。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炒茄子

不装逼我浑身难受aaa

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值