2

我在使用 Matplotlib colorbar 时遇到了一些麻烦,也许我不理解文档(我不是以英语为母语的人)或其核心概念。

假设我有一个数据矩阵(形状,N*2)。我想制作这个数据的散点图,并添加一个基于标签列(N * 1)的配色方案,在浮点数中。我知道如何使用 colorbar 和 scalarmappable。

但是,我对此标签列中的一些枢轴值感兴趣,我希望将这些值呈现在颜色条的某个有趣位置。例如,标签值为 0,我想将它定位在 1/3 位置或中间——在我选择的颜色栏中,它可以是白色或灰色。

但是如果我理解正确的话,colorbar 只会从 [min, max] 中的原始数据中获取映射到 [0, 1] 中的数据数组。在这种情况下,我感兴趣的枢轴值最终会随机出现,除非我非常仔细地定义我的标准化函数。

所以要将我喜欢的白色作为我的枢轴值放在颜色条的中间,我必须定义标准化函数,它不仅可以标准化我的数据,而且还要使枢轴值位于 0.5 的位置。

对于我有限的 Matplotlib 经验,这是我知道的解决方案。

理想情况下,假设我有一列浮点数据,我可以选择一些枢轴值,并给它们一些特殊的位置。然后我将它们标准化并提供给颜色图。但是,颜色条可以为我之前定义的那些特殊位置设置特殊颜色。并获得一个带有正确刻度定位器和刻度标签的相应颜色条,指示我的特殊枢轴值。

我正在寻找一种更简单的方法(来自标准库),我可以使用它来实现这一点。

4

1 回答 1

1

如果您可以发布您想要制作的情节,这将非常有帮助。但根据我的理解,您只想在一个或多个特定位置对颜色条做一些事情。这很简单,下面的案例展示了一个在 0.5 处写入文本字符串的示例。

x1=np.random.random(1000)
x2=np.random.random(1000)
x3=np.random.random(1000)
plt.scatter(x1, x2, c=x3, marker='+')
cb=plt.colorbar()
color_norm=lambda x: (x-cb.vmin)/(cb.vmax-cb.vmin)
cb.ax.text(0.5, color_norm(0.5), 'Do something.\nRight here', color='r')

在此处输入图像描述

如果您想在颜色条的 1/3 高度处获得值 0.5,则需要使用cb.set_clim((cmin, cmax))方法调整颜色条限制。将有无限可能(cmin, cmax)满足您的需求,因此需要额外的约束,例如保持最小值不变或保持最大值不变或保持最大值-最小值不变。

于 2013-09-25T15:05:03.587 回答