简单提几个绘制红外云图可能会用到的杂项功能,暂时不作特别详细的展开,以后可能会在本楼慢慢补充/勘误:
1. 云图裁剪
MODIS的1KM云图有2030×1354像素,分辨率更高的VIIRS则有超过6000×6000像素,像这种分辨率很高的极轨云图如果不经过裁剪,渲染时间会较长,而且出图后也很难上传到论坛/贴吧等平台。裁剪数据会用到python的“切片”功能,注意这里需要用到多维(二维)数组的切片,而不是普通的一维切片。
以bt31为例,二维数组的切片方法如下:
bt31[a:b, c:d]
a,b代表第一个方向上的起止序号;c,d代表第二个方向,这样能裁剪出以TC为中心的近似平行四边形的图像,我现在画的大部分云图也是这种。
如果需要得到长方形图像可以直接通过经纬度裁剪,未使用Cartopy的话可以直接用plt.xlim,plt.ylim输入经纬度进行裁剪,如果使用了Cartopy可以使用set_extent,若直接通过经纬度裁剪figsize也需要相应地调整。
2. 眼温读取
这个没什么技术难度,通过适当的切片使TC眼区为图像中亮温最高的部分,随后使用np.max读取即可。
3. 海岸线/不同投影
一般会选择Cartopy实现海岸线绘制和等经纬以外的投影。
import cartopy.crs as ccrs
import cartopy.feature as cfeature
fig = plt.figure(figsize=(londiff, latdiff), dpi=150) #给创建的画布一个名字(fig)
ax = fig.subplots(1, 1, subplot_kw={'projection': ccrs.Mercator()}) #设置子图为墨卡托投影,使高纬TC形态不被“压扁”
ax.add_feature(cfeature.COASTLINE.with_scale('10m'), lw=1) #添加海岸线
ax.pcolormesh(newlon, newlat, bt31, vmin=-100, vmax=50, cmap=LinearSegmentedColormap('1', bddata), transform=ccrs.PlateCarree()) #加上transform参数,明确数据原先是在等经纬网格上定义的
同一张Patricia,使用了墨卡托投影并加了墨西哥海岸线(不过画非高纬TC我平时还是最习惯等经纬)
1. 云图裁剪
MODIS的1KM云图有2030×1354像素,分辨率更高的VIIRS则有超过6000×6000像素,像这种分辨率很高的极轨云图如果不经过裁剪,渲染时间会较长,而且出图后也很难上传到论坛/贴吧等平台。裁剪数据会用到python的“切片”功能,注意这里需要用到多维(二维)数组的切片,而不是普通的一维切片。
以bt31为例,二维数组的切片方法如下:
bt31[a:b, c:d]
a,b代表第一个方向上的起止序号;c,d代表第二个方向,这样能裁剪出以TC为中心的近似平行四边形的图像,我现在画的大部分云图也是这种。
如果需要得到长方形图像可以直接通过经纬度裁剪,未使用Cartopy的话可以直接用plt.xlim,plt.ylim输入经纬度进行裁剪,如果使用了Cartopy可以使用set_extent,若直接通过经纬度裁剪figsize也需要相应地调整。
2. 眼温读取
这个没什么技术难度,通过适当的切片使TC眼区为图像中亮温最高的部分,随后使用np.max读取即可。
3. 海岸线/不同投影
一般会选择Cartopy实现海岸线绘制和等经纬以外的投影。
import cartopy.crs as ccrs
import cartopy.feature as cfeature
fig = plt.figure(figsize=(londiff, latdiff), dpi=150) #给创建的画布一个名字(fig)
ax = fig.subplots(1, 1, subplot_kw={'projection': ccrs.Mercator()}) #设置子图为墨卡托投影,使高纬TC形态不被“压扁”
ax.add_feature(cfeature.COASTLINE.with_scale('10m'), lw=1) #添加海岸线
ax.pcolormesh(newlon, newlat, bt31, vmin=-100, vmax=50, cmap=LinearSegmentedColormap('1', bddata), transform=ccrs.PlateCarree()) #加上transform参数,明确数据原先是在等经纬网格上定义的
同一张Patricia,使用了墨卡托投影并加了墨西哥海岸线(不过画非高纬TC我平时还是最习惯等经纬)