【问题标题】:Make seaborn show a colorbar instead of a legend when using hue in a bar plot?在条形图中使用色调时,让 seaborn 显示颜色条而不是图例?
【发布时间】:2018-09-20 12:30:35
【问题描述】:

假设我想制作一个条形图,其中条形的色调代表一些连续的量。例如

import seaborn as sns
titanic = sns.load_dataset("titanic")
g = titanic.groupby('pclass')
survival_rates = g['survived'].mean()
n = g.size()
ax = sns.barplot(x=n.index, y=n,
           hue=survival_rates, palette='Reds',
            dodge=False,
          )
ax.set_ylabel('n passengers')

这里的传说有点傻,我绘制的条形越多越糟糕。最有意义的是颜色条(例如在调用sns.heatmap 时使用)。有没有办法让 seaborn 做到这一点?

【问题讨论】:

    标签: python matplotlib seaborn


    【解决方案1】:

    另一个答案有点老套。因此,一个更严格的解决方案(不产生事后删除的图)将涉及手动创建一个 ScalarMappable 作为颜色条的输入。

    import matplotlib.pyplot as plt
    import seaborn as sns
    titanic = sns.load_dataset("titanic")
    g = titanic.groupby('pclass')
    survival_rates = g['survived'].mean()
    n = g.size()
    
    norm = plt.Normalize(survival_rates.min(), survival_rates.max())
    sm = plt.cm.ScalarMappable(cmap="Reds", norm=norm)
    sm.set_array([])
    
    ax = sns.barplot(x=n.index, y=n, hue=survival_rates, palette='Reds', 
                     dodge=False)
    
    ax.set_ylabel('n passengers')
    ax.get_legend().remove()
    ax.figure.colorbar(sm)
    
    plt.show()
    

    【讨论】:

    • 您的 matplotlib 知识无与伦比。 :) 另一个很好的解决方案。 +1
    • 这太棒了!有没有办法确保海洋色调和颜色条完全同步?我担心他们会以不同的方式映射值。
    • 当我尝试这个时,我得到一个倒置的颜色条。你知道怎么解决吗? stackoverflow.com/questions/70841189/…
    【解决方案2】:

    你可以试试这个:

    import matplotlib.pyplot as plt
    import seaborn as sns
    titanic = sns.load_dataset("titanic")
    g = titanic.groupby('pclass')
    survival_rates = g['survived'].mean()
    n = g.size()
    
    plot = plt.scatter(n.index, n, c=survival_rates, cmap='Reds')
    plt.clf()
    plt.colorbar(plot)
    ax = sns.barplot(x=n.index, y=n, hue=survival_rates, palette='Reds', dodge=False)
    ax.set_ylabel('n passengers')
    ax.legend_.remove()
    

    输出:

    【讨论】:

    • @coquelicot 谢谢。这更有意义。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2018-10-16
    • 1970-01-01
    • 2016-05-15
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多