我想在色彩映射中使用matplotlibs pcolormesh和掩码数据(即用特殊颜色表示不是所选色图的一部分)来处理3种以上类型的数据。 正如这个example所示,很明显如何使用三个函数为三种类型做到这一点:
cmap.set_under('yellow')
cmap.set_over('cyan')
cmap.set_bad('blue')
但是如何才能为那些“不坏”的价值做到这一点,而不是在给定范围之下或之上,但是值得特别注意,例如:用于表示“最佳值”' (在给定范围内)显示为colormap的数据。
在代码方面:下面的indices_to_be_masked_with_another_color
应采用不同的颜色(不使用颜色图中的颜色)。
import matplotlib.pyplot as plt
import numpy as np
import copy
np.random.seed(0)
D = np.random.rand(12, 72)
D[4, :] = np.nan
D[6, 6] = np.nan
D[2, :] = np.linspace(0.4, 0.6, D[2, :].size)
D = np.ma.masked_invalid(D)
cmap = copy.copy(plt.get_cmap('bwr'))
cmap.set_bad(color = 'k', alpha = 1.)
cmap.set_under(color = 'cyan')
cmap.set_over(color = 'yellow')
xbin = np.linspace(0, 12, 13)
ybin = np.linspace(-90, 90, 73)
fig = plt.figure()
ax = fig.add_subplot(111)
pl = ax.pcolormesh(xbin, ybin, D.T, cmap = cmap, edgecolors = 'None',
vmin = 0.1, vmax = 0.9)
indices_to_be_masked_with_another_color = np.where(np.abs(D - 0.5) < 0.1)
# what to do now?
plt.show()
第三列中的所有值都应具有特殊颜色,例如绿色
答案 0 :(得分:0)
您可以使用以下行:
import matplotlib.colors as colors
ind = (np.abs(D.T - 0.5) > 0.1)
new_D = np.ma.masked_array(D.T,mask=ind)
greenmap = colors.ListedColormap(['g'])
ax.pcolormesh(xbin,ybin,new_D,cmap=greenmap,edgecolors='None')
首先,您不需要使用np.where
,而是为那些您 希望变为绿色的值创建一个新的掩码。
然后您创建一个列出的颜色图(仅为绿色)以与pcolormesh
最后,您使用此蒙版数组和新色彩图在另一个上绘制另一个pcolormesh
。