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

如何在Python的for循环中将多组数据绘制到同一张图表?

解决多文件曲线合并到单张图表的问题

你的问题出在每次循环调用df.plot()时,默认会创建新的绘图窗口,所以5次循环生成5张独立图表。要把所有曲线合并到一张图里,只需指定所有绘图共用同一个Axes对象即可,具体修改如下:

关键修改点

  • 在循环外先创建全局的Figure和Axes对象
  • 调用df.plot()时通过ax参数指定绘图的Axes
  • 添加图例区分不同文件的曲线
  • 优化Excel文件加载(避免循环内重复加载,提升效率)

修改后的完整代码

import pandas as pd
import openpyxl as xl
import functions
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path

path = Path(r'C:\Users\Test Python')
# 提前加载直径Excel文件,避免循环内重复加载
diameter_wb = xl.load_workbook(r'C:\Users\Diameters.xlsx')
sheet = diameter_wb['Sheet1']

# 创建全局绘图对象,所有曲线都画在这个ax上
fig, ax = plt.subplots()

for count, file in enumerate(path.glob('*DMS.csv')):
    print(file)
    df = pd.read_csv(file, sep=";", usecols=[0, 1, 2, 3])

    # 获取直径并计算面积
    diameter = sheet.cell(count+2, 2).value
    area_tendon = functions.area(diameter)

    # 计算应力
    df["Stress MPa"] = functions.stress(area_tendon, df['Kraft kN'])

    # 计算弹性模量
    df['Modulus of Elasticity MPa'] = df['Stress MPa'] / df['DMS1 %'] * 10**-2

    # 指定ax参数,在同一个图上绘图,并添加文件名作为图例
    df.plot(x="DMS1 %", y="Stress MPa", ax=ax, label=file.name)

# 添加图表标题和坐标轴标签(可选,按需调整)
ax.set_title("DMS1 % vs Stress MPa (All Tests)")
ax.set_xlabel("DMS1 %")
ax.set_ylabel("Stress MPa")
# 显示图例
ax.legend()

plt.show()

额外说明

  • df.plot()的x和y参数建议显式指定,避免歧义
  • 循环外加载直径Excel文件可以减少IO操作,提升代码运行效率
  • 通过label=file.name给每条曲线添加文件名标识,方便区分不同测试数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:01:09