matplotlib中的颜色图允许用特定的颜色标记“坏”值,即NaN。当我们绘制颜色条时,这个颜色不包括在内。是否有一种首选的方法,既有连续的颜色条,又有一个离散的图例来表示坏值的特定颜色?
**编辑:**当然,可以使用“扩展”功能。但是,这种解决方案并不令人满意。图例/颜色条的功能是向用户阐明颜色的含义。在我看来,这种解决方案并没有传达值是NaN。
代码示例:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
data = np.random.rand(10, 10)
data[0:3, 0:3] = np.nan # some bad values for set_bad
colMap = cm.RdBu
colMap.set_bad(color='black')
plt.figure(figsize=(10, 9))
confusion_matrix = plt.imshow(data, cmap=colMap, vmin=0, vmax=1)
plt.colorbar(confusion_matrix)
plt.show()
它产生:
3条答案
按热度按时间beq87vna1#
图例元素可以按如下方式创建和使用:
tquggr8v2#
您可以使用https://matplotlib.org/3.1.1/tutorials/colors/colorbar_only.html#discrete-intervals-colorbar上显示的用于超范围绘图的方法之一来完成此操作
将坏值的颜色设置为-999,并使用关键字
extend
。另一种方法是使用掩码绘图,如here所示。
另一种方法是使用cmap.set_bad()。一个例子是here。
qyzbxkaa3#
虽然将其添加到图例是一个选项(请参阅JohanC's answer),但颜色在语义上属于颜色条,我通常不希望在带有颜色条的颜色编码图上有单独的图例。
经过长时间的实验,我发现最好的方法是添加一个单独的单色colorbar,与适当的colorbar相关联:
NaN
颜色条的大小和距离可以通过上面的size
和pad
进行调整。正如你在编辑中所写的,另一个选择是滥用
extend
,但是颜色将直接添加到颜色条的下方/上方,没有可见的间隙,并且在API中没有明确的方法将标签与它关联起来:第三种选择是创建一个新的色彩Map表,并为NaN值保留一部分,但这也很麻烦,并且与真实的颜色没有明显的差距。