【问题标题】:Changing legend labels on seaborn FacetGrid with barplot and boxplot?使用条形图和箱线图更改 seaborn FacetGrid 上的图例标签?
【发布时间】:2021-04-09 10:54:42
【问题描述】:

如何使用条形图和箱线图更改 seaborn FacetGrid 上的图例标签?

使用散点图,您可以轻松做到这一点:

tips = sns.load_dataset('tips')
g = sns.FacetGrid(data=tips, col='time')
g.map_dataframe(sns.scatterplot, x='total_bill', y='tip', hue='sex')
plt.legend(labels=['Men', 'Women'])

但是,使用箱线图的相同代码会从图例中删除色块:

g = sns.FacetGrid(data=tips, col='time')
g.map_dataframe(sns.boxplot, x='smoker', y='tip', hue='sex')
plt.legend(labels=['Men', 'Women'])

与条形图本身不同,FacetGrid 没有legend_ 属性,因此现有的条形图解决方案(如this)不容易应用。

如何在不移除色块的情况下修改图例标签?

【问题讨论】:

    标签: python seaborn bar-chart boxplot


    【解决方案1】:

    您可以使用 FacetGrid 的 add_legend 方法来做到这一点。调用add_legend 时,legend_data 参数将标签映射到色块。 FacetGrid 将其默认图例数据存储在 _legend_data 属性中。因此,您需要做的就是传递一个 legend_data 参数,其中您想要的标签作为键,FacetGrid 的默认 _legend_data 值作为值。

    g = sns.FacetGrid(data=tips, col='time')
    g.map_dataframe(sns.barplot, x='smoker', y='tip', hue='sex')
    hue_labels = ['Men', 'Women']
    g.add_legend(legend_data={
        key: value for key, value in zip(hue_labels, g._legend_data.values())
    })
    

    g = sns.FacetGrid(data=tips, col='time')
    g.map_dataframe(sns.boxplot, x='smoker', y='tip', hue='sex')
    hue_labels = ['Men', 'Women']
    g.add_legend(legend_data={
        key: value for key, value in zip(hue_labels, g._legend_data.values())
    })
    

    【讨论】:

    • 不要在更新 seaborn 时不会意外中断的代码中访问 g._legend_data
    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 2016-05-15
    • 2019-03-27
    • 2016-09-03
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多