matplotlib 如何编辑图形级函数的海运图例标题和标签

dojqjjoe  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(96)

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


的数据
我的代码:

import seaborn as sns

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

字符串
您可能会注意到,图的图例标题只是变量名称('millennial'),图例项是变量的值(0,1)。如何编辑图例的标题和标签?理想情况下,传奇的标题将是“一代”,标签将是“千禧一代”和“老一辈”

jv2fixgn

jv2fixgn1#

我花了一段时间来通读上面的内容。这就是我的答案:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")

g = sns.lmplot(
    x="total_bill", 
    y="tip", 
    hue="smoker", 
    data=tips,  
    legend=False
)

plt.legend(title='Smoker', loc='upper left', labels=['Hell Yeh', 'Nah Bruh'])
plt.show(g)

字符串
更多参数请参考以下内容:matplotlib.pyplot.legend


的数据

b91juud3

b91juud32#

  • 如果legend_out设置为True,则图例可通过g._legend属性获得,并且它是图形的一部分。Seaborn图例是标准matplotlib图例对象。因此,您可以更改图例文本。
    *python 3.8.11matplotlib 3.4.3seaborn 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):

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)



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

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)



此代码适用于任何基于Grid class的海上绘图。

相关问题