【问题标题】:How to create custom standalone matplotlib colorbar with labels?如何使用标签创建自定义独立 matplotlib 颜色栏?
【发布时间】:2021-12-03 10:23:38
【问题描述】:

我想创建一个带有文本标签的自定义和独立的 matplotlib 颜色栏。但是,我无法正确地将标签分配给颜色栏中的颜色。如何使用 matplotlib 为颜色栏中的每种颜色分配文本标签?

import matplotlib.colorbar as colorbar
import matplotlib.colors as clr
import matplotlib.pyplot as plt

cb_colors = ["#000000", "#808000", "#D3D3D3", "#FFFFFF", "#000080", "#FF4500", "#696969", "#FFFFE0"]
cmap_ = clr.ListedColormap(cb_colors)

fig = plt.figure()
ax = fig.add_axes([0.05, 0.80, 0.9, 0.1])

cb = colorbar.ColorbarBase(ax, orientation='horizontal', 
                               cmap=cmap_)

cb.ax.set_xticks([0, 1, 2, 3, 4, 5, 6, 7])
cb.ax.set_xticklabels(["A", "B", "C", "D", 
                       "E", "F", "G", "H"])

P.S.:即使我将代码更改为以下代码,它也没有解决我的问题。

cb.set_ticks([0, 1, 2, 3, 4, 5, 6, 7])
cb.set_ticklabels(["A", "B", "C", "D", 
                       "E", "F", "G", "H"])

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    默认的内部编号是从 0 到 1。大于 1 的位置的刻度将不可见。内部编号可以通过norm 更改。让值介于 -0.5 和 7.5 之间,0,1,...,7 的位置会很好地位于每种颜色的中心:

    import matplotlib.colorbar as colorbar
    import matplotlib.colors as clr
    import matplotlib.pyplot as plt
    
    cb_colors = ["#000000", "#808000", "#D3D3D3", "#FFFFFF", "#000080", "#FF4500", "#696969", "#FFFFE0"]
    num_colors = len(cb_colors)
    cmap_ = clr.ListedColormap(cb_colors)
    
    fig = plt.figure()
    ax = fig.add_axes([0.05, 0.80, 0.9, 0.1])
    
    cb = colorbar.ColorbarBase(ax, orientation='horizontal',
                               cmap=cmap_, norm=plt.Normalize(-0.5, num_colors - 0.5))
    
    cb.set_ticks(range(num_colors))
    cb.ax.set_xticklabels(["A", "B", "C", "D", "E", "F", "G", "H"])
    plt.show()
    

    如果您需要保持默认范围 0 到 1,您可以使用cb.set_ticks(np.linspace(0, 1, 2*num_colors+1)[1::2])。这会将范围划分为 17 个等间距的位置,并将使用奇数的位置作为刻度。

    【讨论】:

    • 是的,你是对的。我后来意识到编号问题。但是,如果您的答案中有规范值,它看起来很棒。谢谢。
    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多