簡體   English   中英

修改seaborn line relplot圖例標題

[英]Modify seaborn line relplot legend title

首先,我是 Python 和 seaborn 的新手,但在這件事上花了一些時間后,我相信我的問題沒有在其他地方得到解決。 如果是這樣,我真誠地道歉。

我想使用帶有kind='line'的 seaborn relplot()函數將數據relplot()的數據繪制為多條不同顏色的行。 與行相對應的數據由列中的值( cat ,例如)分類分隔,我使用hue (在這種情況下, hue='cat' )。 這是一個簡單的例子:

import pandas as pd
import seaborn as sns
df = pd.DataFrame({'x': [0, 1, 3, 4, 7, 1, 2, 5, 6],
                   'y': [2, 4, 3, 6, 5, 7, 10, 9, 7],
                   'cat': [0, 0, 0, 0, 0, 1, 1, 1, 1]})
g = sns.relplot(x='x', y='y', hue='cat', kind='line', data=df);

它產生以下圖形:

示例圖

如何修改圖例標題而不更改列cat的名稱? 我相信我的問題是圖例標題實際上是作為圖例項目實現的,所以我想要做的是刪除該項目,然后添加適當的圖例標題(我可以使用g._legend.set_title('New title') ),但我不知道如何做到這一點。

這個問題與Remove seaborn lineplot legend title 的不同之處在於relplot() with kind='line'生成一個FacetGrid圖並將圖例附加到那個圖上。 這意味着我無法以g.ax.legend().texts訪問圖例內容,但必須使用g._legend ,在這種情況下我迷路了。

一種選擇是使用g._legend.texts[0].set_text("")將第一個圖例條目設置為空字符串,然后使用g._legend.set_title('New title')

import seaborn as sns
df = pd.DataFrame({'x': [0, 1, 3, 4, 7, 1, 2, 5, 6],
                   'y': [2, 4, 3, 6, 5, 7, 10, 9, 7],
                   'cat': [0, 0, 0, 0, 0, 1, 1, 1, 1]})
g = sns.relplot(x='x', y='y', hue='cat', kind='line', data=df)

g._legend.texts[0].set_text("")
g._legend.set_title("New title")
g._legend._legend_box.sep = -5  # move title down slightly

plt.show()

在此處輸入圖片說明

您還可以使用以下方法更改水平對齊方式:

g._legend._legend_box.align = "right"  # or left, or center

另一種選擇是自己繪制圖例:

g = sns.relplot(x='x', y='y', hue='cat', kind='line', data=df, legend=False)
ax =g.axes[0][0]

for i, line in enumerate(ax.lines):
    line.set_label(i)

leg = ax.legend()
leg.set_title("New title")

下面顯示了將第一個圖例條目設置為空字符串的替代方法(由評論中的 ImportanceOfBeingErnest 建議):

c = g._legend.get_children()[0].get_children()[1].get_children()[0]
c._children = c._children[1:]

對我來說, g._legend.texts[0].set_text("")刪除了圖例中第一個元素的標簽,而不是標題。 也許 seaborn 0.11.1 對g._legend.texts[0]定義不同。

因此我簡單地使用了

g._legend.set_title("")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM