python - 选择部分颜色图绘制地形

标签 python matplotlib gis visualization tiff

数据

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

  • 我不想在地 block 上显示分区以外的区域。

我的目标

使用 plt.pcolormesh(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 绘制的Sea/Ocean。

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

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

最佳答案

我现在有两个解决方案。

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

关于python - 选择部分颜色图绘制地形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35920887/

相关文章:

python - 如何从 Python 列表中绘制可缩放的康托集?

python - 在散点图中显示方向箭头

python - SDE 的 ListFeatureClasses() 故障

python - 使用 matplotlib 绘制地形作为背景

r - 如何在 R 中用多边形剪辑 WorldMap?

python - 如何在Python中将二进制元素的数据解析为列表列表?

python - 多线程迭代器

python - PyQt 中的 QKeyPress 事件

将 bool 值插入 mysql 数据库时出现 Python mysql.connector 错误

python - 如何告诉 Homebrew 在 vi​​rtualenv 中安装?