在matplotlib

时间:2015-07-23 16:11:17

标签: python matplotlib

我想用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时如何摆脱该区域?

1 个答案:

答案 0 :(得分:2)

您需要使用numpy masking模块制作蒙版数组,而不是仅使用np.nan。将Z2[(X+Y)>=10]=np.nan更改为Z2 = np.ma.masked_array(Z, (X+Y)>=10)