Python matplotlib使用pcolormesh

时间:2015-11-04 17:30:40

标签: python matplotlib

我想在色彩映射中使用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()

第三列中的所有值都应具有特殊颜色,例如绿色

enter image description here

1 个答案:

答案 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')

enter image description here

首先,您不需要使用np.where,而是为那些您 希望变为绿色的值创建一个新的掩码。

然后您创建一个列出的颜色图(仅为绿色)以与pcolormesh

一起使用

最后,您使用此蒙版数组和新色彩图在另一个上绘制另一个pcolormesh