如何在Matplotlib中的可自定义位置设置颜色条上的枢轴?

时间:2013-09-25 13:28:42

标签: python matplotlib normalization colorbar

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

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

但是,我对此标签列中的某些透视值感兴趣,并希望将这些值显示在颜色条的某个有趣位置。例如,标签值0,我想将它定位在1/3位置或中间位置 - 我选择的颜色栏中可以有白色或灰色。

但是如果我理解正确的话,colorbar只会从[min,max]中的原始数据中获取映射在[0,1]中的数据数组。在这种情况下,我感兴趣的数据透视值将在某个地方随机结束,除非我非常仔细地定义我的规范化函数。

因此,为了我的透视值,我更喜欢的白色颜色位于颜色条的中间,我必须定义标准化函数,它不仅标准化我的数据,而且还使透视值在0.5的位置。

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

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

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

1 个答案:

答案 0 :(得分: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')

enter image description here

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