matplotlib 图例中的标签重复

Duplication of label in matplotlib legend

我使用 for 循环在图表中绘制了两条线。

plt.figure(num=2, dpi=120)
plt.title(r"Fonction $\mu$(x) et sa spline cubique pour différents degrés")
plt.plot(xe_array, fu(xe_array), color="green", label=r"$\mu$(x)")

nlist=[50,200]
color_list=["red", "blue"]
for j in range(len(nlist)):
    x_=np.linspace(start=0, stop=1, num=nlist[j]+1)
    y_=np.array(fu(x_))
    ye_=csi.spline_cub(x_,y_, xe_array)[0]
    plt.plot(x_,y_,ye_, color=color_list[j], label=f"n={nlist[j]}")

plt.xlabel("x")
plt.ylabel("f(x)")
plt.ylim(-2,2)
plt.legend(loc=(1.04,0.5))
plt.show()

xe_array 已经定义并且是一个 linspace 数组。

这是输出:

这是一个错误吗?

您在 plt.plot 函数的同一次调用中绘制了两条线。它正在绘制 x_, y_ye_.

我无法 运行 你的代码,因为它不完整,但这里有类似的东西:

import matplotlib.pyplot as plt
import numpy as np

plt.figure(num=2, dpi=120)
plt.title(r"Fonction $\mu$(x) et sa spline cubique pour différents degrés")

x_=np.linspace(start=0, stop=1, num=50+1)
y_=np.array(np.sin(x_))
    
plt.plot(x_,y_,y_, color='r', label=f"n=50")

plt.legend(loc=(1.04,0.5))
plt.show()

它产生了两个相同的图例。

下面产生一个。

plt.plot(x_,y_, color='r', label=f"n=50")

额外的一点:我不认为这部分在官方文档中是well-documented。但我的理解是,这是“故意”非常类似于plot function in matlab。所以下面的图 n 行具有相同的标签:

plot(x1, y1, x2, y2, ... xn, yn, label='something')

在您的情况下,您只提供了奇数个位置参数,因此我认为它将您的最后一个参数 (ye_) 解释为 y-only 行。很难说这是错误还是功能。