如何在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
相关产品推荐
相关产品推荐

