打印遮罩numpy数组导致不正确的颜色栏

打印遮罩numpy数组导致不正确的颜色栏,numpy,matplotlib,Numpy,Matplotlib,我正在尝试为matplotlib创建自定义颜色栏。在我试图策划一个新的计划之前,一切似乎都很好。即使绘图显示正确的颜色,颜色栏也不再显示正确的颜色。绘制遮罩阵列是否有不同的程序 我正在使用matplotlib 1.4.0和numpy 1.8 这是我的绘图代码: import numpy import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.collections import PolyCollection

我正在尝试为matplotlib创建自定义颜色栏。在我试图策划一个新的计划之前,一切似乎都很好。即使绘图显示正确的颜色,颜色栏也不再显示正确的颜色。绘制遮罩阵列是否有不同的程序

我正在使用matplotlib 1.4.0和numpy 1.8

这是我的绘图代码:

import numpy
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.collections import PolyCollection

vertices = numpy.load('vertices.npy')
array = numpy.load('array.npy')

# Take 2d slice out of 3D array
slice_ = array[:, :, 0:1].flatten(order='F')

fig, ax = plt.subplots()

poly = PolyCollection(vertices, array=slice_, edgecolors='black', linewidth=.25)

cm = mpl.colors.ListedColormap([(1.0, 0.0, 0.0), (.2, .5, .2)])
poly.set_cmap(cm)

bounds = [.1, .4, .6]
norm = mpl.colors.BoundaryNorm(bounds, cm.N)

fig.colorbar(poly, ax=ax, orientation='vertical', boundaries=bounds, norm=norm)
ax.add_collection(poly, autolim=True)
ax.autoscale_view()
plt.show()
下面是情节的样子:

但是,当我在切片之前使用以下更改绘制遮罩阵列时:

array = numpy.ma.array(array, mask=array > .5)
我得到一个颜色栏,现在只显示一种颜色。即使两种颜色(正确)仍显示在绘图中


在绘制蒙版数组时,是否有一些技巧来保持colobar的一致性?我知道我可以使用
cm.set_bad
更改遮罩值的颜色,但这不是我想要的。我希望颜色栏在这两个绘图之间显示相同,因为这两种颜色和颜色栏本身应该保持不变。

将边界范数传递给多边形集合,
poly
。否则,
poly.norm
默认设置为
matplotlib.colors.Normalize
实例:

In [119]: poly.norm
Out[119]: <matplotlib.colors.Normalize at 0x7faac4dc8210>

谢谢你的建议!您是对的,关于
fig.colorbar
的某些内容没有正确地提取
BoundaryNorm
实例。
import numpy
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.collections as mcoll
import matplotlib.colors as mcolors

numpy.random.seed(4)
N, M = 3, 3
vertices = numpy.random.random((N, M, 2))
array = numpy.random.random((1, N, 2))
# vertices = numpy.load('vertices.npy')
# array = numpy.load('array.npy')
array = numpy.ma.array(array, mask=array > .5)
# Take 2d slice out of 3D array
slice_ = array[:, :, 0:1].flatten(order='F')
fig, ax = plt.subplots()

bounds = [.1, .4, .6]
cm = mpl.colors.ListedColormap([(1.0, 0.0, 0.0), (.2, .5, .2)])
norm = mpl.colors.BoundaryNorm(bounds, cm.N)

poly = mcoll.PolyCollection(
    vertices, 
    array=slice_, 
    edgecolors='black', linewidth=.25, norm=norm)

poly.set_cmap(cm)

fig.colorbar(poly, ax=ax, orientation='vertical')
ax.add_collection(poly, autolim=True)
ax.autoscale_view()
plt.show()