我想用pcolormesh覆盖不同颜色的区域。确实没有显示遮蔽区域,但是它们覆盖了其他互补区域。下面是一个例子,我首先分别绘制两个区域(因此掩模很好地工作),但后来我想覆盖它们,但第二个覆盖第一个。如何获得不同区域颜色不同的情节?
#!/usr/bin/env python
import numpy as np
import matplotlib.pyplot as plt
xi=np.linspace(0,10,100)
yi=np.linspace(0,10,150)
x=0.5*(xi[1:]+xi[:-1])
y=0.5*(yi[1:]+yi[:-1])
X,Y=np.meshgrid(x,y)
Z = np.exp(-(X-5)**2-(Y-5)**2)
Z1 = Z.copy()
Z1[(X+Y)<10]=np.nan
Z2 = Z.copy()
Z2[(X+Y)>=10]=np.nan
plt.figure(figsize=(4,12),tight_layout=True)
plt.subplot(3,1,1)
plt.pcolormesh(x,y,Z1,cmap='Greens',vmin=0,vmax=Z.max())
plt.subplot(3,1,2)
plt.pcolormesh(x,y,Z2,cmap='Blues',vmin=0,vmax=Z.max())
plt.subplot(3,1,3)
plt.pcolormesh(x,y,Z1,cmap='Greens',vmin=0,vmax=Z.max())
plt.pcolormesh(x,y,Z2,cmap='Blues',vmin=0,vmax=Z.max())
我应该补充一点,如果我使用contourf
而不是pcolormesh
,整个过程会很好用,但是它们之间会有一个丑陋的空白区域,如下所示。替代问题:使用contourf
时如何摆脱该区域?
答案 0 :(得分:2)
您需要使用numpy masking模块制作蒙版数组,而不是仅使用np.nan。将Z2[(X+Y)>=10]=np.nan
更改为Z2 = np.ma.masked_array(Z, (X+Y)>=10)
。