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

如何在Python中将多组曲线拟合结果展示于同一图表?

解决方案

核心思路是不要在单次拟合后调用pyplot.show(),将所有绘图操作集中在同一画布完成,最后统一展示。同时通过循环批量处理所有数组的行数据,用颜色、标记区分不同曲线。

修改后的完整代码

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

# 定义拟合用的二次函数(和你现有代码逻辑匹配)
def objective(x, a, b, c):
    return a * x + b * np.square(x) + c

# 将4个数组放入列表统一处理,替换为你实际的数组变量名
target_arrays = [center_1080, center_720, center_480, center_360]
# 为每个数组分配专属颜色,方便区分
color_palette = ['red', 'blue', 'green', 'orange']

x = np.arange(0, 10)
# 用更密集的步长生成x轴点,让拟合曲线更平滑
x_line = np.arange(min(x), max(x)+1, 0.1)

# 循环处理每个数组
for arr_idx, current_arr in enumerate(target_arrays):
    # 循环处理当前数组的每一行
    for row_idx, y_data in enumerate(current_arr):
        # 执行曲线拟合
        popt, _ = curve_fit(objective, x, y_data)
        a, b, c = popt
        print(f'数组{arr_idx+1} 第{row_idx+1}行: y = %.5f * x + %.5f * x^2 + %.5f' % (a, b, c))
        
        # 绘制原始数据散点
        plt.scatter(x, y_data, marker='o', alpha=0.5, label=f'数组{arr_idx+1} 行{row_idx+1} 原始点')
        # 绘制拟合曲线
        y_line = objective(x_line, a, b, c)
        plt.plot(x_line, y_line, '--', color=color_palette[arr_idx], label=f'数组{arr_idx+1} 行{row_idx+1} 拟合曲线')

# 添加图表基础元素
plt.xlabel('X')
plt.ylabel('Y')
plt.title('所有拟合曲线对比')
# 将图例放在画布外侧,避免遮挡曲线
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.grid(True)
# 最后统一展示所有绘图内容
plt.show()

关键改动说明

  • 统一画布管理:所有绘图操作都在plt.show()之前执行,确保所有曲线、散点都渲染在同一张图中。
  • 批量循环处理:通过嵌套循环遍历4个数组的所有行,避免重复编写单一行的拟合、绘图代码。
  • 曲线区分策略:用不同颜色标记不同数组的曲线,配合图例清晰标注每条曲线的来源。
  • 拟合线优化:缩小x_line的步长,让拟合曲线更平滑直观。

注意事项

  • 如果你的拟合函数不是二次函数,直接替换objective函数即可,整体逻辑无需调整。
  • 若曲线数量过多导致图例拥挤,可简化图例文字(如只保留数组+行号),或调整图例位置。
  • 确保所有数组的x轴范围一致(你当前场景下都是0-9,无需额外处理),若x范围不同,需将x_line范围统一为所有数据的最小、最大值区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:56:04