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