【问题标题】:How can I change the Seaborn FacetGrid's legend title?如何更改 Seaborn FacetGrid 图例标题?
【发布时间】:2019-08-23 22:24:11
【问题描述】:

在 Seaborn 的基于 FacetGrid 的线图中,想更改标签标题。看似简单的事情,结果却是一项艰巨的任务

tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col= 'day', legend_out= True,)
g.map(sns.lineplot, 'total_bill', 'tip', 'sex', 'time',
     ci = False)    
g.fig.legend()

legend title 'sex'

我想通过添加“title”参数将标签标题从“sex”更改为“gender”。但事实证明,它成为现有标题之上的标题

g.add_legend(title = 'Gender')

legend title 'sex' with headline 'Gender'

我也尝试访问 fig.legend 来更改文本,但现在它显示了多个图例,可能是由于多方面的情节。

l = g.fig.legend()
l.texts[0].set_text('Gender')

legend title 'Gender', however, with multiple legends

我确信通过更改数据中的变量名称来更改名称可能有一种“hacky”方式,但我想知道是否有一种方法可以简单地替换 Seabron FacetGrid 的图例标题,或者,如果它不可能,通过“fig.legend”添加标题,同时显示单个相关图例。非常感谢!

【问题讨论】:

  • 您可以使用 g._legend 访问FacetGrid 图例。我从this post 得到了这个想法。我认为在那之后参考matplotlib tutorial 应该可以帮助您解决这个问题。

标签: python matplotlib plot seaborn


【解决方案1】:

为什么不将"sex" 列的名称替换为"Gender"

import matplotlib.pyplot as plt
import seaborn as sns

tips = sns.load_dataset("tips")
tips.columns = [n if n != "sex" else "Gender" for n in tips.columns]

g = sns.FacetGrid(tips, col= 'day')
g.map(sns.lineplot, 'total_bill', 'tip', 'Gender', 'time',
     ci = False)    
g.add_legend()

plt.show()

【讨论】:

  • 感谢您的回答。我相信这是做到这一点的方法之一。但是,由于我计划为许多不同的数据集生成类似的图表,因此随意更改变量名称可能不是一个长期的解决方案。
  • 这是您可以拥有的最干净的解决方案。任何其他解决方案都需要自行处理图例文本。
  • 我同意你的意见。对于这个特定的数据集,它肯定是最干净的解决方案。我只是希望有一个合理的解决方案来应用于具有多种不同类型变量的多个不同数据集。
  • 这正是重点。如果您有多个数据集,有时需要替换第一个图例条目,有时是第三个,等等。这非常麻烦。相反,如果您传递已替换列名称的数据集,则无需再关心其他任何内容。对于不同的数据集,替换一列很容易实现自动化。
  • 虽然我同意这是要走的路,但这并不能回答所提出的问题:/
猜你喜欢
  • 2020-05-30
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2022-01-28
  • 1970-01-01
  • 2015-11-22
相关资源
最近更新 更多