Pyplot使用TwoSlopeNorm与LinearSegmentedColormap时零值设蓝色失效问题
你只需要在原有绘图代码中添加一行y轴翻转的代码即可实现预期效果,修改后的绘图部分代码如下:
# plot f,a = plt.subplots() raster = a.pcolormesh(data,cmap=cmap, norm=divnorm) # 新增这行翻转y轴,匹配数组行顺序和视觉上下顺序 a.invert_yaxis() cbar = f.colorbar(raster,ax=a, extend='both') plt.show()
原因说明
- 你当前的
set_under配置本身是正确的:TwoSlopeNorm的vmin=1,所有小于1的数值(包括你设置的0、-1)都会触发set_under指定的蓝色样式,nan值也会正常显示为你设置的中春绿色。 - 未达到预期是因为matplotlib的
pcolormesh默认将二维数组的第0行渲染在图表最顶部,数组的最后一行渲染在图表最底部,所以你预期放在底部的全0首行跑到了顶部,两个蓝色方块也出现在了图表下半区域。 - 翻转y轴后,数组的第0行对应图表最底部,数组行索引越大对应图表位置越靠上,刚好匹配你要的效果:底部出现全蓝线条,上半区域出现两个蓝色方块,中上部的nan值显示为绿色。
如果遇到色块边界模糊的情况,可以在pcolormesh的参数中增加shading='nearest'即可解决。
内容的提问来源于stack exchange,提问作者msg
相关产品推荐
相关产品推荐

