没有传说的 Seaborn 折线图

10
当我使用Seaborn制作在同一轴上有多个线图的折线图时,不会创建任何图例。即使我在sns.lineplot中提供“brief”或“full”参数以供图例使用,也不会显示任何内容,并且调用ax.get_legend_handles_labels()将返回两个空列表。
如何在右侧添加一个框来添加图例,并将线条的颜色链接到名称?

enter image description here

import seaborn as sns
import matplotlib.pyplot as plt
import random

fig1 = plt.figure(figsize=(12, 12))
ax = fig1.add_subplot(1, 1, 1)

x = range(10)

series = list()
for i in range(3):
    y_i = list()
    for j in range(10):
        y_i.append(random.randint(0, 50))

    sns.lineplot(x=x, y=y_i, ax=ax, legend='brief')

plt.show()
2个回答

14

那是因为您将简单列表用作x和y数据。它们没有像名称或标签之类的元数据。但是,您可以通过-kwarg添加标签,例如:

sns.lineplot(x=x, y=y_i, ax=ax, legend='brief', label=str(i))

你可以决定使用pandas的Series对象或DataFrame对象来处理数据,它们都能够提供列名。


4
您可以在创建绘图后,通过单独的调用来添加图例:
ax.legend(['label 1', 'label 2', 'label 3'])

在使用二维数组而非使用循环中的多个值列表创建线图的情况下,它非常有用。 在您的情况下,可以如下所示:

data = np.random.randint(0, 50, size=(10, 3))  # results in 3 lines of length 10 each
sns.lineplot(data=data, ax=ax)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接