同一张图中,不同的绘图使用相同的图例标签
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 6, 10)
plt.figure()
for i in range(10):
T = i + 20
Fit = 4 * x - ( 2 + i)
noise = np.random.normal(loc=0, scale=1.0, size=len(Fit))
data_exp = Fit + noise/5
plt.scatter(x, data_exp, marker='o', label= f'Experimental data T = {T}°C')
plt.plot(x, Fit, 'k-', label=f'Fit T = {T}°C')
plt.xlabel('Optical power (mW)')
plt.ylabel('Current (mA)')
plt.legend()
plt.grid(True)
plt.show()
我在上面的代码中给出一个问题的示例,并上传了它生成的图。
我想做的是缩小图例的尺寸,因为可能有很多温度值;如果图例太大,会遮挡数据和拟合曲线。为此,我希望为拟合显示一个统一的标签,因为它们的显示方式相同(都是黑色线条)。
将“--- Fit 20°C”、“--- FIT 21°C”、“---FIT 22°”等写法放在图例中是没有意义的。相反,我只想让“--- FIT”只出现一次。
我该如何实现?

解决方案
最简单的方法是在一条黑线仅使用 label=。
例如,把它作为图例中的最后一个元素。
if i == 9:
plt.plot(x, Fit, "k-", label="Fit")
else:
plt.plot(x, Fit, "k-")
另一种方法是在绘制所有黑线时不带标签
plt.plot(x, Fit, "k-")
然后在图例中添加自定义元素
handles, labels = plt.gca().get_legend_handles_labels()
handles.append(plt.Line2D([0], [0], color="black"))
labels.append("Fit")
plt.legend(handles, labels)
结果:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 6, 10)
plt.figure()
for i in range(10):
T = i + 20
Fit = 4 * x - (2 + i)
noise = np.random.normal(loc=0, scale=1.0, size=len(Fit))
data_exp = Fit + noise / 5
plt.scatter(x, data_exp, marker="o", label=f"Experimental data T = {T}°C")
# plt.plot(x, Fit, "k-") # , label=f'Fit T = {T}°C')
# if i == 9:
# plt.plot(x, Fit, "k-", label=f"Fit")
# else:
# plt.plot(x, Fit, "k-")
plt.plot(x, Fit, "k-")
handles, labels = plt.gca().get_legend_handles_labels()
handles.append(plt.Line2D([0], [0], color="black"))
labels.append("Fit")
plt.legend(handles, labels)
plt.xlabel("Optical power (mW)")
plt.ylabel("Current (mA)")
plt.grid(True)
plt.show()
Matplotlib文档:
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
