基于离散年份区分使用matplotlib绘制多组季节性数据折线图
Matplotlib 实现多年份季节性折线图完整方案
import pandas as pd import matplotlib.pyplot as plt # -------------------------- # 1. 加载/构造数据(你可以替换为你自己的df读取逻辑) # -------------------------- data = [ [5, 2017, "10/29"], [4, 2016, "10/30"], [3, 2018, "10/31"], [5, 2019, "10/31"], [10, 2017, "10/31"] ] df = pd.DataFrame(data, columns=["Total", "Year", "Day"]) # -------------------------- # 2. 处理日期排序,保证X轴按时间顺序排列 # -------------------------- # 临时生成排序用的键,忽略年份只看月日,解决字符串日期排序乱序问题 df["sort_key"] = pd.to_datetime(df["Day"], format="%m/%d") df = df.sort_values("sort_key").reset_index(drop=True) # -------------------------- # 3. 按年份分组绘制折线 # -------------------------- plt.figure(figsize=(10, 6)) for year, group in df.groupby("Year"): plt.plot(group["Day"], group["Total"], marker="o", label=str(year)) # -------------------------- # 4. 优化图表显示 # -------------------------- plt.xlabel("日期(月/日)") plt.ylabel("Total数值") plt.title("多年份季节性数据对比") plt.legend(title="年份") # X轴标签旋转避免重叠 plt.xticks(rotation=30) # 自动调整布局避免标签被截断 plt.tight_layout() plt.show()
常见问题优化
- 若存在日期缺失导致折线断裂:可先通过
pivot补全缺失值,示例代码如下:# 补全所有日期和年份的组合,缺失的Total默认填充为0 df_full = df.pivot(index="Day", columns="Year", values="Total").fillna(0).stack().reset_index(name="Total") - 若X轴日期过多显示拥挤:可调整
plt.xticks(rotation=45)的旋转角度,或通过plt.xticks(ticks=range(0, len(df["Day"].unique()), 2))设置间隔展示日期
内容的提问来源于stack exchange,提问作者yeet_man
相关产品推荐
相关产品推荐

