Select 部分colormap绘制地形
Select part of the colormap plotting terrain
数据
.tif 数据DEM 是代表一个行政区划的海拔高度值。我上传了here
分区以外的区域我不想在地块上给他们看。
我的目标
使用 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
的颜色图,因为它适合这种情况。
所以,我想移除颜色图的蓝色部分,并使用代表平原的green
开始地形。
我现在有两个解决方案。
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,)
结果
数据
.tif 数据DEM 是代表一个行政区划的海拔高度值。我上传了here
分区以外的区域我不想在地块上给他们看。
我的目标
使用 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
的颜色图,因为它适合这种情况。
所以,我想移除颜色图的蓝色部分,并使用代表平原的green
开始地形。
我现在有两个解决方案。
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,)