我有一个数组,其中包含体面的观察结果,无关的观察结果(我想遮盖)和没有观察点的区域(我也想遮盖)。我想将此数组显示为带有两个单独的蒙版的图像(使用pylab.imshow),其中每个蒙版以不同的颜色显示。

我找到了具有特定颜色的单个蒙版(here)的代码,但对于两个不同的蒙版却找不到任何代码:

masked_array = np.ma.array (a, mask=np.isnan(a))
cmap = matplotlib.cm.jet
cmap.set_bad('w',1.)
ax.imshow(masked_array, interpolation='nearest', cmap=cmap)

如果可能的话,我希望避免使用严重失真的颜色图,但是可以接受,这是一种选择。

最佳答案

您可以根据某些条件,简单地用固定值替换数组中的值。例如,如果要屏蔽大于1且小于-1的元素:

val1, val2 = 0.5, 1
a[a<-1]= val1
a[a>1] = val2
ax.imshow(a, interpolation='nearest')

可以修改val1val2以获得所需的颜色。

您也可以显式设置颜色,但需要更多工作:
import matplotlib.pyplot as plt
from matplotlib import colors, cm

a = np.random.randn(10,10)

norm = colors.normalize()
cmap = cm.hsv
a_colors = cmap(norm(a))

col1 = colors.colorConverter.to_rgba('w')
col2 = colors.colorConverter.to_rgba('k')

a_colors[a<-0.1,:] = col1
a_colors[a>0.1,:] = col2
plt.imshow(a_colors, interpolation='nearest')
plt.show()

10-08 02:37