如何为图形级函数编辑 seaborn 图例标题和标签 [英] How to edit a seaborn legend title and labels for figure-level functions

查看:49
本文介绍了如何为图形级函数编辑 seaborn 图例标题和标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 Seaborn 和 Pandas 数据框 (data) 创建了这个图:

I've created this plot using Seaborn and a pandas dataframe (data):

我的代码:

g = sns.lmplot('credibility', 'percentWatched', data=data, hue = 'millennial', markers = ["+", "."], x_jitter = True, y_jitter = True, size=5)
g.set(xlabel = 'Credibility Ranking
 ← Low       High  →', ylabel = 'Percent of Video Watched [%]')

您可能注意到图的图例标题只是变量名称('millennial'),图例项是变量的值(0, 1).如何编辑图例的标题和标签?理想情况下,传奇的标题应该是世代",标签应该是千禧一代".和老一代"

You may notice the plot's legend title is simply the variable name ('millennial') and the legend items are the variable's values (0, 1). How can I edit the legend's title and labels? Ideally, the legend's title would be 'Generation' and the labels would be "Millennial" and "Older Generations"

推荐答案

  • 如果 legend_out 设置为 True,则图例可通过 g._legend 属性获得,并且它是图形的一部分.Seaborn 图例是标准的 matplotlib 图例对象.因此,您可以更改图例文本.
  • python 3.8.11matplotlib 3.4.3seaborn 0.11.2
    • If legend_out is set to True then legend is available through the g._legend property and it is a part of a figure. Seaborn legend is standard matplotlib legend object. Therefore you may change legend texts.
    • Tested in python 3.8.11, matplotlib 3.4.3, seaborn 0.11.2
    • import seaborn as sns
      
      # load the tips dataset
      tips = sns.load_dataset("tips")
      
      # plot
      g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], facet_kws={'legend_out': True})
      
      # title
      new_title = 'My title'
      g._legend.set_title(new_title)
      # replace labels
      new_labels = ['label 1', 'label 2']
      for t, l in zip(g._legend.texts, new_labels):
          t.set_text(l)
      

      如果 legend_out 设置为 False 的另一种情况.您必须定义哪些轴具有图例(在下面的示例中,这是轴编号 0):

      Another situation if legend_out is set to False. You have to define which axes has a legend (in below example this is axis number 0):

      g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], facet_kws={'legend_out': False})
      
      # check axes and find which is have legend
      leg = g.axes.flat[0].get_legend()
      new_title = 'My title'
      leg.set_title(new_title)
      new_labels = ['label 1', 'label 2']
      for t, l in zip(leg.texts, new_labels):
          t.set_text(l)
      

      此外,您可以结合这两种情况并使用此代码:

      Moreover you may combine both situations and use this code:

      g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], facet_kws={'legend_out': True})
      
      # check axes and find which is have legend
      for ax in g.axes.flat:
          leg = g.axes.flat[0].get_legend()
          if not leg is None: break
      # or legend may be on a figure
      if leg is None: leg = g._legend
      
      # change legend texts
      new_title = 'My title'
      leg.set_title(new_title)
      new_labels = ['label 1', 'label 2']
      for t, l in zip(leg.texts, new_labels):
          t.set_text(l)
      

      此代码适用于任何基于 的 seaborn 图网格.

      This code works for any seaborn plot which is based on Grid class.

      这篇关于如何为图形级函数编辑 seaborn 图例标题和标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆