Numpy 在使用cartopy时,如何使pcolor以白色打印NaN值?

Numpy 在使用cartopy时,如何使pcolor以白色打印NaN值?,numpy,matplotlib,nan,colormap,cartopy,Numpy,Matplotlib,Nan,Colormap,Cartopy,我正在用python中的cartopy和pcolor在海洋地图上绘制一些整数值标签。我希望NaN值显示为白色斑块。但是,目前,NaN值是使用colormap中的最低颜色绘制的。如何使pcolor以白色显示NaN值 我已经尝试过使用诸如cmap.set_bad之类的函数来调整颜色贴图,但到目前为止我无法实现这一点。我也尝试过使用蒙版数组,但也不起作用。我在下面提供了一些独立的示例代码,这些代码至少在我的环境中再现了这个问题 将numpy导入为np 将matplotlib导入为mpl 将carto

我正在用python中的cartopy和pcolor在海洋地图上绘制一些整数值标签。我希望NaN值显示为白色斑块。但是,目前,NaN值是使用colormap中的最低颜色绘制的。如何使pcolor以白色显示NaN值

我已经尝试过使用诸如cmap.set_bad之类的函数来调整颜色贴图,但到目前为止我无法实现这一点。我也尝试过使用蒙版数组,但也不起作用。我在下面提供了一些独立的示例代码,这些代码至少在我的环境中再现了这个问题

将numpy导入为np
将matplotlib导入为mpl
将cartopy.crs作为CCR导入
将cartopy.feature导入为cfeature
将matplotlib.pyplot作为plt导入
从随机输入种子
从随机导入randint
##设置整数标签的最大数目
n_comp=4
#生成随机整数“标签”作为示例数据
种子(1)
标签=np.零((128*64,1))
对于范围(0,64*128-1)内的ncomp:
标签[ncomp]=randint(0,n_comp)
#将阵列设置为二维以进行打印
labels2D=标签。重塑((128,64))
#将零替换为nan
labels2D[labels2D==0]=np.nan
#创建纬度/经度数据
x=np.arange(0.0360.0,2.815)
xx=np.tile(x[64,1])
xx=xx.transpose()
y=np.arange(-90,90,2.815)
yy=np.tile(y[128,1])
#创建图形和轴
图=plt.图(图尺寸=(10,5))
ax=图添加子批次(1,1,1,
投影=ccrs.Robinson(中心经度=-150))
#创建彩色地图
cmap=plt.get\u cmap('Accent',n\u comp+1)
#使用白色标记“坏”值
cmap.set_坏(color='w')
#使用norm定义颜色映射
边界=np.arange(0.5,n_comp+1,1)
norm=mpl.colors.BoundaryNorm(边界,cmap.N,clip=True)
#使用pcolor制作标签贴图
labelMap=ax.pcolor(xx,yy,labels2D,
transform=ccrs.PlateCarree(),
norm=norm,
cmap=cmap,
vmin=1,
vmax=n_comp)
#在标签数据顶部添加大陆
ax.add_特征(cfeature.LAND,zorder=1,edgecolor='black')
#在色条中心用记号打印色条
plt.colorbar(labelMap,ticks=np.arange(1,n_comp+1,1))
#显示图
plt.show()

我希望NaN值用白色表示,但目前它们用colormap中的颜色打印。提前感谢您的帮助/指导。

您的代码适合我,我得到的是白色值而不是颜色

我使用的是NUMPY1.15.0、MPL2.2.2和CARTOPY0.16.0


在mac电脑上。

谢谢!我切换到您的软件包版本,nan值现在显示为白色。