发生的情况是,您使用的是屏蔽数组,其中异常值被屏蔽。
因此,它们不会在颜色条上显示为“结束”。 (即就 matplotlib 而言,屏蔽值无效,未超过阈值)
作为重现您的问题的独立示例:
import numpy as np
import matplotlib.pyplot as plt
threshold = 0.8
data = np.random.random((10,10))
data = np.ma.masked_greater(data, threshold)
fig, ax = plt.subplots()
im = ax.imshow(data, cmap=plt.cm.hot, interpolation='none')
cbar = fig.colorbar(im, extend='max')
cbar.cmap.set_over('green')
plt.show()
如果我们只是不将其设为掩码数组,而是指定vmax
夸格到imshow
:
import numpy as np
import matplotlib.pyplot as plt
threshold = 0.8
data = np.random.random((10,10))
fig, ax = plt.subplots()
im = ax.imshow(data, cmap=plt.cm.hot, interpolation='none', vmax=threshold)
cbar = fig.colorbar(im, extend='max')
cbar.cmap.set_over('green')
plt.show()
基本上,这是之间的区别set_over
(或之下)和set_bad
.
如果您仍然想使用屏蔽数组,您可以调用cbar.cmap.set_bad('green')
也set_over
,你就会得到你想要的效果(尽管所有“坏”值,而不仅仅是超过阈值的值,都将是绿色的)。如果您采用该路线,则需要手动指定vmax
。否则,它将被视为数组中未屏蔽部分的最大值。