在matplotlib中叠加pcolormesh图层

3

我希望使用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个回答

3

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


1
我之前在我的生产代码中尝试过这个,但结果还是一样的。但对于上面的例子,它确实有效。需要弄清楚我的代码出了什么问题。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接