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

如何用Pandas和Matplotlib读取Excel绘制同图双区域年度折线图

问题原因

代码报错、无法输出预期结果是三个核心问题导致的:

  • 未定义df_region变量:读取Excel得到的原始df是包含所有地点、所有区域的全量数据,你没有先做分组聚合计算各区域年度总和,直接引用不存在的DataFrame取值,拿到的数据维度完全不符合绘图要求。
  • 绘图数据逻辑错误:x轴是3个年度的刻度,你却把单年份的整列数据作为y值传入,自然会出现x、y长度不匹配的报错。你需要的是每条折线对应一个区域,折线上的三个点分别对应该区域2019、2020、2021三年的汇总值,不是把三个年份拆成三个独立y变量。
  • 年份顺序颠倒:你写的x轴顺序是["2021", "2020", "2019"],画出来的时间趋势是倒序的,不符合常规展示逻辑。
修改方案
  1. 先用pandas的groupby按区域分组,对三个年份的数值列求和,得到每个区域各年度的总数值
  2. 把x轴调整为时间正序的年份列表,分别提取A、B两个区域对应的三年汇总值作为两条折线的y轴数据,保证x和每个y序列长度一致
  3. 绘图时分别传入两个区域的数值序列,对应好图例标签
修改后可运行代码
import matplotlib.pyplot as plt
import pandas as pd

excel_file_path = "Testfile.xlsx"
df = pd.read_excel(excel_file_path)

# 按区域分组,计算各区域三个年份的数值总和
df_region_sum = df.groupby("区域列名")[["Values2019", "Values2020", "Values2021"]].sum().reset_index()

# x轴按时间从早到晚排序
x = ["2019", "2020", "2021"]
# 提取A区域三年的汇总值
y_a = df_region_sum[df_region_sum["区域列名"] == "A"][["Values2019", "Values2020", "Values2021"]].values.flatten()
# 提取B区域三年的汇总值
y_b = df_region_sum[df_region_sum["区域列名"] == "B"][["Values2019", "Values2020", "Values2021"]].values.flatten()

fig = plt.figure(figsize=(20,5))
# 分别绘制两个区域的折线
plt.plot(x, y_a, color = 'red', label = "A区域")
plt.plot(x, y_b, color = 'blue', label = "B区域")

plt.xlabel("年份")
plt.ylabel("数值总和")
plt.legend(loc='best')

plt.show()

注意:代码里的"区域列名"要替换成你自己Excel里存储A/B区域标识的实际列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:27:40