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

如何在同一幅图中用指定指数方程拟合多组CSV数据并绘制曲线

多组CSV指数拟合同图绘制实现方案

依赖库

  • numpy
  • pandas
  • matplotlib
  • scipy

完整实现代码

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

# 自定义拟合函数
def func(x, a, c):
    return a - 1/2 * np.exp(-(x - 1)/c)

# 配置参数
csv_list = ["10.csv", "20.csv", "30.csv", "40.csv", "50.csv"]
# 自定义配色,区分不同组数据
color_list = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd"]
# 生成拟合用的平滑x序列,保证曲线显示效果
x_smooth = np.linspace(1, 100, 500) # 可根据实际x的取值范围调整上下限

plt.figure(figsize=(10, 6), dpi=100)

# 遍历处理每组数据
for idx, csv_name in enumerate(csv_list):
    # 读取CSV,无表头场景默认按索引取列
    df = pd.read_csv(csv_name, header=None)
    x = df.iloc[:, 1].values
    y = df.iloc[:, 2].values
    
    # 拟合求解参数
    popt, _ = curve_fit(func, x, y)
    a, c = popt
    # 计算拟合优度R²,不需要可删除
    y_fit_raw = func(x, *popt)
    ss_res = np.sum((y - y_fit_raw) ** 2)
    ss_tot = np.sum((y - np.mean(y)) ** 2)
    r2 = 1 - (ss_res / ss_tot)
    
    # 绘制原始散点
    plt.scatter(x, y, color=color_list[idx], s=15, alpha=0.6, label=f"{csv_name} 原始数据")
    # 绘制拟合曲线,直接在图例中标注c参数值
    y_fit_smooth = func(x_smooth, *popt)
    plt.plot(x_smooth, y_fit_smooth, color=color_list[idx], linewidth=2, label=f"{csv_name} 拟合曲线 (c={c:.2f}, R²={r2:.3f})")

# 图表美化配置
plt.xlabel("自变量x", fontsize=12)
plt.ylabel("精度值y", fontsize=12)
plt.legend(fontsize=10)
plt.grid(alpha=0.3)
plt.show()

注意事项

  • 如果拟合出现不收敛报错,可给curve_fit添加初始值参数,例如popt, _ = curve_fit(func, x, y, p0=[0.9, 5]),p0的两个值分别对应a和c的初始猜测值,可根据实际数据范围调整
  • 若CSV文件带表头,需删除pd.read_csv中的header=None参数,改为按列名取数即可
  • x_smooth的取值范围可根据实际x的最小、最大值调整,保证曲线覆盖全部数据区间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:39:03