【问题标题】:matplotlib legend not showing correctlymatplotlib 图例未正确显示
【发布时间】:2023-01-18 01:08:12
【问题描述】:

我正在尝试从 csv 文件中绘制一些数据。我使用 Pandas 加载 csv 文件。我正在使用 sns.lineplot() 绘制线条。但其中的一个传说总是错误的。它在图例之一周围显示了一个正方形。

plt.figure(dpi=150)
lin1 = sns.lineplot(x = "Training time", y = "Relative L2 error", data=df[df["Activation"]=="tanh"])
lin2 = sns.lineplot(x = "Training time", y = "Relative L2 error", data=df[df["Activation"]=="silu"])
lin3 = sns.lineplot(x = "Training time", y = "Relative L2 error", data=df[df["Activation"]=="swish"])
plt.xlabel("Training time  (sec)")
plt.legend(("tanh", "silu", "swish"))
plt.yscale('log',base=10)

我用了3个不同的函数,因为Activations比较多。这是结果图。

情节看起来是正确的,但传说正在制造问题。以下是我正在使用的绘图工具的版本。

Python 3.9.12
matplotlib                    3.6.1
matplotlib-inline             0.1.6
seaborn                       0.12.1

我在互联网上找不到同样的问题。内核重启无济于事。如果需要更多信息,请告诉我。

【问题讨论】:

  • 你能用plt.plot(...)代替seaborn吗?通过使用 plt.plot(...),您可以使用参数 label 设置图例。

标签: python matplotlib seaborn legend


【解决方案1】:

尝试将标签参数添加到各个线图中,然后只调用不带任何参数的图例:

plt.figure(dpi=150)
lin1 = sns.lineplot(x = "Training time", y = "Relative L2 error", data=df[df["Activation"]=="tanh"], label = 'tanh')
lin2 = sns.lineplot(x = "Training time", y = "Relative L2 error", data=df[df["Activation"]=="silu"], label = 'silu')
lin3 = sns.lineplot(x = "Training time", y = "Relative L2 error", data=df[df["Activation"]=="swish"], label = 'swish')
plt.xlabel("Training time  (sec)")
plt.legend()
plt.yscale('log',base=10)

【讨论】:

    【解决方案2】:

    您还可以通过使用 hue 的单个命令绘制所有线条:

    sns.lineplot(x = "Training time", y = "Relative L2 error", data=df[df["Activation"].isin(["tanh", "silu", "swish"])], hue="Activation")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2021-02-15
      • 1970-01-01
      相关资源
      最近更新 更多