我在使用 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) 满足您的需要,因此需要额外的约束,例如保持最小值不变或保持最大值不变或保持最大最小值不变。
