cmap.set_bad()没有显示pcolor()的任何效果

and*_*s-h 3 python numpy matplotlib

我正试图在蒙面数组上使用pcolor.我希望蒙面元素以特殊颜色显示.我写了一些代码,但它似乎不起作用:

import matplotlib as mpl
import matplotlib.pyplot as plt

from numpy import linspace
from numpy.random import randn
from numpy.ma import masked_invalid

D = randn(12*72).reshape((12,72))
D[4,:] = nan
D[6,6] = nan

D = masked_invalid(D)

cmap = mpl.cm.bwr
c    map.set_bad('k', 1.)

xbin = linspace(0, 12, 13)
ybin = linspace(-90, 90, 73)

fig = plt.figure()
spl = fig.add_subplot(111)
pl = spl.pcolor(xbin, ybin, D.T, cmap=cmap, edgecolors='none',
                vmin=-5, vmax=5)
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 8

pcolormesh的文档说:

掩码数组支持通过cmap和norm实现; 相比之下,pcolor()根本不会绘制带有蒙版颜色或顶点的四边形.

所以请改用pcolormesh:

import matplotlib.pyplot as plt
import numpy as np

D = np.random.randn(12*72).reshape((12, 72))
D[4, :] = np.nan
D[6, 6] = np.nan

D = np.ma.masked_invalid(D)

cmap = plt.get_cmap('bwr')
cmap.set_bad(color = 'k', alpha = 1.)

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 = -5, vmax = 5)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我从文档中添加了一个片段,警告"pcolor"不会绘制带有蒙版颜色的四边形.除此之外,文档中列出的明显差异,(例如``pcolor`接受`PolyCollection` kwargs,而'pcolormesh`接受'QuadMesh` kwargs)我还没有形成关于何时使用哪个的意见. (2认同)