首页 文章

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

提问于
浏览
2

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

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

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

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

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

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

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

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

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')
    

    enter image description here

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

相关问题