Skip to main content
 首页 » 编程设计

python之如何在 Matplotlib 中的可自定义位置的颜色栏上设置枢轴

2025年05月04日13daizhj

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

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

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

但是如果我没有理解错的话,colorbar 只会从 [min, max] 中的原始数据中获取映射到 [0, 1] 中的数据数组。在这种情况下,除非我非常仔细地定义归一化函数,否则我感兴趣的枢轴值将随机出现在某个地方。

所以要将我喜欢的白色放在颜色条的中间,我必须定义规范化函数,它不仅规范化了我的数据,而且还使枢轴值位于 0.5 的位置.

就我有限的 Matplotlib 经验而言,这是我所知道的解决方案。

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

我正在寻找一种更简单的方法(来自标准库)来实现这一目标。

请您参考如下方法:

如果你能发布你想制作的情节,那将非常有帮助。但是根据我的理解,您只想在一个或多个特定位置对颜色条执行某些操作。这很容易,下面的案例展示了在 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) 满足您的需要,因此需要额外的约束,例如保持最小值不变或保持最大值不变或保持最大最小值不变。