同一张图中,不同的绘图使用相同的图例标签

后端开发 2026-07-09
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章