You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib同图中为多拟合曲线设置统一图例标签

解决方法

要把所有拟合曲线的图例合并为单个“Fit”项,有两种简单可行的方式:

方法一:仅首次循环添加拟合曲线的图例标签

在循环中,只在第一次迭代时给拟合曲线设置label='Fit',后续迭代不设置label参数。这样matplotlib只会为第一条拟合线生成图例项,而所有拟合线样式一致,完全可以代表整体:

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')
    # 仅第一次循环添加拟合线的图例标签
    if i == 0:
        plt.plot(x, Fit, 'k-', label='Fit')
    else:
        plt.plot(x, Fit, 'k-')
plt.xlabel('Optical power (mW)')
plt.ylabel('Current (mA)')
plt.legend()
plt.grid(True)
plt.show()

方法二:手动创建自定义图例

如果需要更灵活的控制,可以手动创建图例元素,把所有拟合曲线映射到同一个图例条目:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1, 6, 10)

plt.figure()
# 先绘制所有曲线,不添加拟合线的label
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-')

# 创建自定义图例项:黑色实线对应"Fit"
from matplotlib.lines import Line2D
custom_lines = [Line2D([0], [0], color='k', linestyle='-')]
# 获取现有散点的图例项,再合并自定义项
handles, labels = plt.gca().get_legend_handles_labels()
handles.extend(custom_lines)
labels.extend(['Fit'])

plt.legend(handles=handles, labels=labels)
plt.xlabel('Optical power (mW)')
plt.ylabel('Current (mA)')
plt.grid(True)
plt.show()

两种方法都能实现图例精简,第一种更简洁高效,适合样式统一的场景;第二种适合需要对图例做更多自定义调整的情况。

内容的提问来源于stack exchange,提问作者Camille

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.05 19:02:31