在条形图中使用色相时,让Seaborn显示色标而不是图例?

发布于 2021-01-29 14:55:19

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

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绘制的条形图

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

关注者
0
被浏览
123
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    另一个答案是有点hacky。因此,更严格的解决方案(不生成随后删除的图)将涉及手动创建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()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看