使用 *args 和 seaborn 绘图时如何显示所有图例

Posted

技术标签:

【中文标题】使用 *args 和 seaborn 绘图时如何显示所有图例【英文标题】:How to display all legends when plotting using *args & seaborn 【发布时间】:2020-10-22 19:56:31 【问题描述】:

我的数据和代码如下

w = [1,2,3,4,5,6,7,8,9,10]
vals = [[1,2,3,4,5,6,7,8,9,10],[2,4,6,8,8,8,8,8,7,1],[1,4,2,4,8,9,8,8,7,2]]

def plot_compare(*id_nums):
    fig = plt.figure(figsize=(10, 5))
    leg=[]
    for id_num in id_nums:
        rel = vals[id_num]
        sns.lineplot(x=w, y=rel)
        leg.append(id_num)
    fig.legend(labels=[leg],loc=5,);
plot_compare(0,2)

这个想法是用一个函数获得多个线图(我的实际数据有很多需要绘制的值) 当我运行上面的代码时,我得到如下图。 折线图正是我想要的,但图例只是一项而不是两项(因为我已经绘制了 2 个折线图)。 我尝试在 for 循环内移动图例行,但没有用。我想要一个可能的传说作为线图。 有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

您将图例作为列表列表。而是使用fig.legend(labels=leg,loc=5)

用途:

w = [1,2,3,4,5,6,7,8,9,10]
vals = [[1,2,3,4,5,6,7,8,9,10],[2,4,6,8,8,8,8,8,7,1],[1,4,2,4,8,9,8,8,7,2]]

def plot_compare(*id_nums):
    fig = plt.figure(figsize=(10, 5))
    leg=[]
    for id_num in id_nums:
        rel = vals[id_num]
        sns.lineplot(x=w, y=rel)
        leg.append(id_num)
    fig.legend(labels=leg,loc=5)
    plt.show()
plot_compare(0,2)

【讨论】:

以上是关于使用 *args 和 seaborn 绘图时如何显示所有图例的主要内容,如果未能解决你的问题,请参考以下文章

使用 seaborn 绘图时,如何为色调参数指定多个变量?

在 Seaborn 中绘图时 Python 代码出错

使用 seaborn 绘图时如何处理缺失值?

如何使用 Python 在 Seaborn 中保存绘图 [重复]

如何将 Seaborn 绘图集成到 Tkinter GUI

使用 seaborn 绘图时转换 pandas 列中的数据类型