使用 imshow 绘图时无法正确定义 GeoTIFF 颜色图

问题描述 投票:0回答:1

我正在尝试绘制最初在 QGIS 中创建的 GeoTIFF。保存文件时,我使用原始数据导出 GeoTIFF 以防止错误,同时制作适当的颜色图以匹配元数据。有关更多上下文,我正在保存 CS3 土地利用 NetCDF 的一个子集。在我将 GeoTIFF 保存到特定范围后,我用 Georaster 打开它,获取图像边界,并用 imshow 绘制它。为了确保我有正确的彩色地图调色板,我阅读了 GeoTIFF,将所有像素值保存在一个数组中,并在彩色地图列表中查找所有可能的值。值数组如下所示:

Raster value list [10, 11, 12, 20, 30, 40, 50, 60, 61, 62, 70, 90, 100, 110, 120, 
122, 130, 150, 153, 160, 170, 180, 190, 200, 210, 220]

这是对应颜色的数组:

flag_colors = [ '#ffff64', '#ffff64', '#ffff00', '#aaf0f0','#dcf064', '#c8c864', 
'#006400', '#00a000','#00a000', '#aac800', '#003c00', '#788200','#8ca000', 
'#be9600','#966400','#966400','#ffb432', '#ffebaf','#ffebaf','#00785a', '#009678', 
'#00dc82', '#c31400','#fff5d7','#0046c8', '#ffffff']

所以当我使用以下脚本绘制文件时:

my_image = georaster.SingleBandRaster(geotif_path, load_data=False) 
minx, maxx, miny, maxy = my_image.extent

nc = georaster.SingleBandRaster(geotif_path, load_data=(minx, maxx, miny, maxy), 
latlon=True)

cmap = ListedColormap(flag_colors)

ax.imshow(nc.r, cmap=cmap, vmin=10, vmax=220, extent=(minx, maxx, miny, maxy))

我得到这张图片:

但我期待的是这样的:

即使我在 GeoTIFF 文件中包含了数组中值的所有颜色,我也没有在绘图上得到正确的颜色。

可以通过此链接访问 GeoTIFF: https://uwmadison.box.com/s/54tobjgj59rsgu03zjb05c6iy0r2xsal

提前谢谢你!

python-3.x matplotlib colormap imshow geotiff
1个回答
0
投票

我找到了解决问题的方法。对于那些有类似问题的人,以下代码将根据我想要自定义颜色图的颜色数量对配色方案进行标准化。我还记得我需要对我的数据进行插值。在这种情况下,我使用“最近”来缩放我的栅格数据。

自定义颜色图:

cmap, norm = colors.from_levels_and_colors(flag_values, flag_colors, 
extend='max')

使用自定义颜色图绘制栅格数据:

ax.imshow(nc.r, cmap=cmap, norm=norm, extent=(minx, maxx, miny, maxy), 
zorder=1, interpolation='nearest')
© www.soinside.com 2019 - 2024. All rights reserved.