Seaborn 繪圖中的圖例
圖例通常是一個小盒子,它出現在圖形的某個角上,用於說明繪圖的不同元素。並且,如果圖中有多個資料,那麼它將告訴哪個元件代表哪個資料。
在本教程中,我們將學習如何為簡單的 Seaborn 圖新增或自定義圖例。
預設情況下,seaborn 自動將圖例新增到圖形中。
例如,
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(
{"Day 1": [7, 1, 5, 6, 3, 10, 5, 8], "Day 2": [1, 2, 8, 4, 3, 9, 5, 2]}
)
sns.lineplot(data=df)
請注意,圖例位於右上角。
如果要顯式新增圖例,則可以使用 matplotlib 庫中的 legend()
函式。這樣,我們可以顯式新增我們自己的標籤。
例如,
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(
{"Day 1": [7, 1, 5, 6, 3, 10, 5, 8], "Day 2": [1, 2, 8, 4, 3, 9, 5, 2]}
)
sns.lineplot(data=df)
plt.legend(labels=["Legend_Day1", "Legend_Day2"])
請注意,seaborn 庫基於並使用 matplotlib 模組建立其圖。因此,我們也可以對 Seaborn 圖使用 legend()
函式。
我們還可以對圖例進行小的定製。例如,我們可以使用 legend()
函式中的 title
引數為圖例新增標題,如下所示。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(
{"Day 1": [7, 1, 5, 6, 3, 10, 5, 8], "Day 2": [1, 2, 8, 4, 3, 9, 5, 2]}
)
sns.lineplot(data=df)
plt.legend(labels=["Legend_Day1", "Legend_Day2"], title="Title_Legend")
fontsize
和 title_fontsize
是分別用於更改圖例及其標題中內容字型的兩個引數。
請參見下面的程式碼。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(
{"Day 1": [7, 1, 5, 6, 3, 10, 5, 8], "Day 2": [1, 2, 8, 4, 3, 9, 5, 2]}
)
sns.lineplot(data=df)
plt.legend(
labels=["Legend_Day1", "Legend_Day2"],
title="Title_Legend",
fontsize="large",
title_fontsize="10",
)
請注意,每個版本的 matplotlib 中都不存在 title_fontsize
,因此請在使用前檢查你的版本。
我們可以使用 loc
和 bbox_to_anchor
引數指定圖例框的大小和位置。
loc 用於指定圖例的位置。不同的數字指定不同的位置。預設情況下,其值為 0,這意味著它將搜尋最佳位置以將圖例放置在發生最小重疊的位置。
bbox_to_anchor
相對於 loc
引數中指定的位置指定圖例的位置。如果我們用 2 個元素元組設定 bbox_to_anchor
引數,則它將其值視為沿指定 loc
定位的 x 和 y 值。
例如,
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(
{"Day 1": [7, 1, 5, 6, 3, 10, 5, 8], "Day 2": [1, 2, 8, 4, 3, 9, 5, 2]}
)
sns.lineplot(data=df)
plt.legend(labels=["Legend_Day1", "Legend_Day2"], loc=2, bbox_to_anchor=(1, 1))
請注意,loc
引數的值為 2,表示左上角的位置。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn