use*_*335 5 python matplotlib image-masking
我有一个数组,包括体面的观察,不相关的观察(我想掩盖),以及没有观察的区域(我也想掩盖).我希望将此数组显示为具有两个单独掩码的图像(使用pylab.imshow),其中每个掩码以不同的颜色显示.
我找到了某种颜色的单个掩码(此处)的代码,但两个不同的掩码没有任何代码:
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)
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想避免使用严重扭曲的颜色图,但接受这是一个选项.
您可以根据某些条件简单地将数组中的值替换为某个固定值。例如,如果要屏蔽大于 1 且小于 -1 的元素:
val1, val2 = 0.5, 1
a[a<-1]= val1
a[a>1] = val2
ax.imshow(a, interpolation='nearest')
Run Code Online (Sandbox Code Playgroud)
val1并且val2可以修改以获得您想要的颜色。
您还可以显式设置颜色,但这需要更多工作:
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()
Run Code Online (Sandbox Code Playgroud)