pathToRaster = r"C:\Program Files\SPEI\\SPEI.flt" raster = gdal.Open(pathToRaster, gdal.GA_ReadOnly) array = raster.ReadAsArray() msk_array = np.ma.masked_equal(array, value=0) # -----------设置画布---------- map = Basemap(projection='cyl', resolution='c', llcrnrlat=-10.25, llcrnrlon=92.25, urcrnrlat=28.75, urcrnrlon=141.25) # -------------设置经纬度范围------------- datain = np.flipud(msk_array) ny = datain.shape[0]; nx = datain.shape[1] x, y = map(lons, lats) # ------------绘制------------ cntr = ax.pcolormesh(x, y, datain, cmap=cm, norm=norm) # vmax,vmin表示绘制的最大最小值 cbar = plt.colorbar(cntr, aspect=27, shrink=0.85, extend=extendn, orientation='vertical') # ,label='Surface Temperature(℃)'
时间: 2023-08-23 13:52:32 浏览: 120
这段代码是用来读取栅格数据并绘制地图的。首先使用`gdal`库中`Open`函数打开栅格数据,读取为数组。后使用`np.ma.masked_equal`函数将中值为0的元素掩盖起来接下来使用`Basemap类创建一个地图投影,设置经纬度范围。然后使用`map`对象的`__call__`方法将经纬度转换为地图上的坐标。最后使用`ax.pcolormesh`方法绘制栅格数据的颜色填充图,并使用`plt.colorbar`方法添加颜色条。
相关问题
shp_path = r'C:\Program Files\SPEI\DM.shp' # 确定shp文件地址 proj = ccrs.PlateCarree() # 简写投影 extent = [88, 144, -14, 30.01] # 限定绘图范围 reader = Reader(shp_path) enshicity = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='k', facecolor='none') ##黑边无填充 # -------------设置经纬度范围------------- lons = np.arange(92, 141, 0.5) lats = np.arange(-10.5, 28.5, 0.5) lons, lats = np.meshgrid(lons, lats) p = 2 if p == 1: out_fig = ".tif" elif p == 2: out_fig = ".svg" # print (p) # colorn = 'gist_heat_r' # colorn = 'hot_r' colorn = 'bwr' leveln = [-2.5, -1.5, -0.5, 0.5, 1.5, 2.5] leveln1 = [-2, -1, 0, 1, 2] leveln2 = ['显著下降', '不显著下降', '无变化', '不显著上升', '显著上升'] # filen = 'delta.flt' # titlen = "Resistance" titlen = "1970-2015年SPEI空间演变格局" # labeln = "天(day)" # labeln = "摄氏度(℃)" extendn = 'neither' out_filen = 'delta.png' colorbar_label_font = colorbar_label_font_C cm = mpl.cm.get_cmap(colorn, 20) # 分为7级 num:Spectral_r 2:CMRmap_r 1:gist_heat_r cm.set_bad("w") # 设置背景色 cm.set_over("darkslategray") cm.set_under("darkslategray") levels = leveln norm = BoundaryNorm(levels, ncolors=cm.N, clip=True)
这段代码是用来设置地图绘制的一些参数和样式。首先,确定了shp文件的地址,并使用ccrs.PlateCarree()设置了投影方式。然后,限定了绘图范围。接下来,使用Reader读取shp文件的几何信息,并使用cfeat.ShapelyFeature创建了一个ShapelyFeature对象,该对象用于绘制地图的边界线。然后,定义了经纬度范围,并使用np.meshgrid生成经纬度网格。根据变量p的值,确定了输出文件的格式。然后,设置了颜色映射、等级、标题、标签等参数。最后,使用mpl.cm.get_cmap获取颜色映射对象,并进行一些设置。
需要注意的是,这段代码中有一些变量和函数的定义是缺失的,比如colorbar_label_font_C和BoundaryNorm函数,可能需要根据上下文补充或者自行定义。
colorn = 'bwr' leveln = [-2.5, -1.5, -0.5, 0.5, 1.5, 2.5] leveln1 = [-2, -1, 0, 1, 2] leveln2 = ['显著下降', '不显著下降', '无变化', '不显著上升', '显著上升'] # filen = 'delta.flt' # titlen = "Resistance" titlen = "1970-2015年SPEI空间演变格局" # labeln = "天(day)" # labeln = "摄氏度(℃)" extendn = 'neither' out_filen = 'delta.png' colorbar_label_font = colorbar_label_font_C cm = mpl.cm.get_cmap(colorn, 20) # 分为7级 num:Spectral_r 2:CMRmap_r 1:gist_heat_r cm.set_bad("w") # 设置背景色 cm.set_over("darkslategray") cm.set_under("darkslategray") levels = leveln norm = BoundaryNorm(levels, ncolors=cm.N, clip=True)
这段代码中定义了一些与颜色映射和等级相关的参数。
- `colorn` 表示颜色映射的名称,这里使用的是'bwr',表示蓝白红的颜色映射。
- `leveln` 是一个列表,表示等级的取值范围。这里的取值范围是[-2.5, -1.5, -0.5, 0.5, 1.5, 2.5],即划分为6个等级。
- `leveln1` 是一个列表,表示等级的取值范围的简化版本。这里的取值范围是[-2, -1, 0, 1, 2],即划分为5个等级。
- `leveln2` 是一个列表,表示每个等级的标签。这里的标签分别是['显著下降', '不显著下降', '无变化', '不显著上升', '显著上升']。
- `titlen` 表示地图的标题,这里的标题是"1970-2015年SPEI空间演变格局"。
- `extendn` 表示颜色映射的扩展方式,这里设置为'neither',表示不进行扩展。
- `out_filen` 表示输出文件的名称,这里设置为'delta.png'。
- `colorbar_label_font` 是一个未定义的变量,可能是用于设置颜色条标签的字体。
接下来,使用mpl.cm.get_cmap函数获取了一个颜色映射对象,并设置了一些颜色的属性,如背景色、超出范围的颜色等。然后,定义了等级的范围和边界规范,用于对数据进行映射和分级显示。
阅读全文