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

如何使用Pandas在同一张折线图中绘制多列数据对比图?

问题分析与解决

你的代码出现KeyError 0的核心原因是:y是DataFrame对象,直接用y[i]会尝试按列名查找索引为0的列,但你的列名都是以.csv结尾的,不存在名为0的列,因此触发报错。同时你的绘图逻辑完全错误——当前是逐行取单个点绘制,而非按列绘制完整折线。

修正后的代码

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
QtzLOD1 = pd.read_csv(r"doc.csv")

# 提取X轴数据
x = QtzLOD1["filename"]
# 精准筛选所有以.csv结尾的列作为Y轴数据
y_cols = QtzLOD1.filter(regex=r'\.csv$')

# 遍历每个Y列,绘制对应折线
for col in y_cols.columns:
    plt.plot(x, y_cols[col], marker=".", label=col)

# 添加图例(方便区分不同折线)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
# 设置轴标签
plt.xlabel("Filename")
plt.ylabel("Values")
# 旋转X轴标签避免重叠
plt.xticks(rotation=45)

# 获取当前画布并保存(替换为你的目标路径)
fig = plt.gcf()
fig.savefig("./output_plot.png", bbox_inches='tight')
plt.show()

关键修正说明

  • 精准筛选Y列:用filter(regex=r'\.csv$')自动匹配所有以.csv结尾的列,比手动指定iloc[:,1:14]更灵活,避免列数变化导致的错误。
  • 修正绘图逻辑:遍历每个Y列,用完整的x数组和当前列的所有数据绘制折线,而非逐点绘制零散的点。
  • 画布与保存处理:用plt.gcf()获取当前画布对象,替代错误的plt.plot();保存时添加bbox_inches='tight'防止图例被截断,同时指定有效保存路径。
  • 可视化优化:添加图例、轴标签、旋转X轴标签,提升图表可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:08:18