Python绘制配对列时间序列图求助:模拟与监测数据无法同图展示
解决批量绘制模拟与监测数据时间序列图的问题
原代码的核心问题
- 语法错误:
plt.figure调用缺少闭合括号 - 未初始化坐标轴对象
ax,导致无法在同一图中绘制两条曲线 - 两条曲线的
label重复,无法区分模拟/监测数据 - 缺少必要的绘图元素(图例、标题、坐标轴标签)及图的显示/保存逻辑
修正后的完整代码
import pandas as pd import matplotlib.pyplot as plt # 1. 读取Excel数据到DataFrame df_Plot = pd.read_excel("你的Excel文件路径.xlsx") # 2. 定义模拟数据和监测数据的列名列表 # 示例:根据你的实际列名调整,确保两组列表长度一致(各30个) parameters_model = ["pH", "WQ[SO4,Dissolved]", ...] # 30个模拟数据列名 parameters_monitor = ["pH data", "WQ data[SO4,Dissolved]", ...] # 对应30个监测数据列名 # 3. 生成配对列表 parameters_pair = zip(parameters_model, parameters_monitor) # 4. 批量绘图 for model_col, monitor_col in parameters_pair: # 创建画布和坐标轴(每一组配对生成一张独立的图) fig, ax = plt.subplots(figsize=(10, 7)) # 绘制模拟数据曲线 ax.plot(df_Plot['Tstamps'], df_Plot[model_col], label="模拟数据", color='blue', linestyle='solid') # 绘制监测数据散点 ax.plot(df_Plot['Tstamps'], df_Plot[monitor_col], label="监测数据", color='orange', marker='s', markersize=4, linestyle='') # 添加绘图元素 ax.set_title(f"{model_col} 模拟vs监测数据时间序列", fontsize=12) ax.set_xlabel("时间", fontsize=10) ax.set_ylabel(model_col, fontsize=10) ax.legend() # 显示图例 ax.grid(alpha=0.3) # 添加网格线 # 可选:保存图片(按参数名命名) plt.savefig(f"{model_col}_对比图.png", dpi=300, bbox_inches='tight') # 显示图片(交互式环境可用) plt.show() # 关闭画布释放内存 plt.close()
关键修正点说明
- 用
plt.subplots()同时创建画布和坐标轴,确保每组配对对应独立绘图区域 - 为两条曲线设置不同的
label,通过图例清晰区分模拟/监测数据 - 添加标题、坐标轴标签和网格,提升图表可读性
- 增加图片保存逻辑,按参数名自动命名文件,避免覆盖
- 循环结束后关闭画布,防止内存占用过高
内容的提问来源于stack exchange,提问作者JJJ2021
相关产品推荐
相关产品推荐

