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

