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

如何使用for循环绘制列表数据与其对应索引的关系图?

场景1:所有csv的功率数据绘制在同一张图中对比

在现有代码末尾追加以下代码即可实现多曲线同图对比:

# 解决matplotlib中文显示问题,不需要可以删掉这两行
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize=(10, 6), dpi=100)
# 遍历dfs列表,同时拿到列表索引和对应DataFrame数据
for list_idx, df in enumerate(dfs):
    # x轴传入数据的行索引,y轴传入功率列数值
    plt.plot(df.index, df['Powermeter1 Start'], label=f'csv文件{list_idx+1}')
plt.xlabel('数据行索引')
plt.ylabel('Powermeter1 Start 数值')
plt.title('功率数据随行索引变化对比')
plt.legend() # 数据量太多导致图例遮挡时可删除该行
plt.grid(alpha=0.3)
plt.show()

场景2:每个csv的数据单独绘制子图

如果需要每个文件的曲线单独展示,可使用子图方案:

# 解决matplotlib中文显示问题,不需要可以删掉这两行
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 子图行列数根据实际csv数量调整,这里假设有8个csv,设为2行4列
row, col = 2, 4
fig, axes = plt.subplots(row, col, figsize=(16, 8), dpi=100)
axes = axes.flatten() # 把子图二维数组摊平,方便循环调用

for list_idx, df in enumerate(dfs):
    ax = axes[list_idx]
    ax.plot(df.index, df['Powermeter1 Start'], c=f'C{list_idx}')
    ax.set_title(f'第{list_idx+1}个csv文件数据')
    ax.set_xlabel('数据行索引')
    ax.set_ylabel('功率数值')
    ax.grid(alpha=0.3)

# 自动调整子图间距避免标签重叠
plt.tight_layout()
plt.show()

小提示:你原代码中使用skipfooter参数时,pandas默认的C解析引擎不支持该参数,运行时会抛出警告,建议把读取csv的行改为df = pd.read_csv(fpath, skiprows=26, skipfooter=5, engine='python')即可消除警告。

核心逻辑说明

  • 用enumerate()遍历dfs列表,可同时拿到当前数据在列表中的索引和对应的DataFrame对象
  • df.index直接对应你需要的每条数据的行索引,作为x轴传入绘图函数即可
  • 如果csv数量过多,可在循环中加入plt.savefig(f'csv_{list_idx+1}.png')将每个图单独保存到本地,避免同屏展示拥挤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:06:02