【问题标题】:Select part of the colormap plotting terrain选择部分颜色图绘制地形
【发布时间】:2016-03-11 09:20:21
【问题描述】:

数据

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

  • 除师以外的区域我不想在情节上显示它们。

我的目标

使用 plt.pcolormesh 绘制该部门的 hypsography(PS:我在阅读 .tif 时发现,plt.imshow()pcolormesh 快得多。我不知道为什么) .

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

http://7xrn7f.com1.z0.glb.clouddn.com/16-3-10/56951530.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)

结果

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

问题

在我的研究部门中,该区域不包含上面blue 绘制的海洋/海洋。

但我想使用plt.cm.terrain 作为我的pcolormesh 的颜色图,因为它适合这种情况。

所以,我想移除颜色图的蓝色部分,并使用代表平原的green 开始地形。

【问题讨论】:

  • 你能调整pcolormeshvmin吗?尝试使其显着低于数据的最小值
  • 好的,我试试看。

标签: python matplotlib gis visualization tiff


【解决方案1】:

我现在有两个解决方案。

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

【讨论】:

    猜你喜欢
    • 2015-11-07
    • 2017-01-30
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2022-11-13
    • 2017-05-01
    • 2021-09-28
    相关资源
    最近更新 更多