选择彩色地图绘制地形的一部分

时间:2016-03-10 15:37:50

标签: python matplotlib gis visualization tiff

数据

  • .tif数据 DEM 是海拔值,代表一个行政区划的地形图。我上传了here

  • 分区以外的区域我不想在情节中显示它们。

我的目标

使用String绘制该分区的地形图( PS:我发现读取.tif,plt.pcolormeshplt.imshow()快得多。我不知道为什么)。

这里我展示了一个我从互联网上剪辑的例子。

http://7xrn7f.com1.z0.glb.clouddn.com/16-3-10/56951530.jpg

我的尝试

pcolormesh

结果

http://7xrn7f.com1.z0.glb.clouddn.com/16-3-10/45669007.jpg

问题

在我的研究部门,该区域不包含由上面### Using GDAL to read the .tif data from osgeo import gdal ### Read the .tif pathToRaster = r'./dem.tif' raster = gdal.Open(pathToRaster, gdal.GA_ReadOnly) dem = raster.GetRasterBand(1).ReadAsArray() dem = dem[::-1] ### Mask the outside value dem_mask = np.ma.masked_less(dem,0) plt.pcolormesh(dem_mask,cmap =plt.cm.terrain) 绘制的海洋/海洋。

但是我想使用blue作为我的plt.cm.terrain色彩映射,因为它适合这种情况。

所以,我想删除colormap的蓝色部分,然后使用代表普通的pcolormesh开始地形。

1 个答案:

答案 0 :(得分:2)

我现在有两个解决方案。

1。使用vmin设置较小的开头。

>print dem_mask.min()
>print dem_mask.max()
output: 20
        2271
## Set vmin value far smaller than 20
plt.pcolormesh(dem_mask,cmap =plt.cm.terrain,vmin = -800)       

2。提取引用this question

的色彩映射的子集
 import matplotlib.colors as colors
 def truncate_colormap(cmap, minval=0.0, maxval=1.0, n=100):
     new_cmap = colors.LinearSegmentedColormap.from_list(
           'trunc({n},{a:.2f},{b:.2f})'.format(n=cmap.name, a=minval, b=maxval),
            cmap(np.linspace(minval, maxval, n)))
     return new_cmap    

 cmap = plt.get_cmap('terrain')
 new_cmap = truncate_colormap(cmap, 0.25, 0.9)
 plt.pcolormesh(dem_mask,cmap =new_cmap,)   

结果

http://7xrn7f.com1.z0.glb.clouddn.com/16-3-11/96590416.jpg