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

如何在Python折线图中将日期格式设置为YYYY-MM并正确排序

解决方法

问题出在你分组后得到的tanggal列是Period类型(YYYY-MM格式的周期对象),而matplotlib的日期格式化工具只识别datetime64类型的日期数据;同时直接用月份数字绘图会丢失年份信息,导致重复月份出现折线回退的问题。

步骤1:转换日期类型并排序

先把Period类型转为matplotlib能识别的datetime类型,同时确保数据按时间顺序排列:

# 将Period转为datetime(默认取每月第一天)
df4['tanggal_dt'] = df4['tanggal'].dt.to_timestamp()
# 按日期排序,避免折线顺序混乱
df4 = df4.sort_values('tanggal_dt')

步骤2:修正绘图代码

用转换后的datetime列作为x轴,再设置日期格式化:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

fig, ax1 = plt.subplots()
# 使用datetime列作为x轴,确保年份和月份都被识别
ax1.plot(df4['tanggal_dt'], df4['jumlah'], lw=2)

# 设置x轴显示格式为YYYY-MM
myFmt = mdates.DateFormatter('%Y-%m')
ax1.xaxis.set_major_formatter(myFmt)
# 设置每月显示一个刻度,避免刻度拥挤
ax1.xaxis.set_major_locator(mdates.MonthLocator())

plt.xticks(rotation=45)
plt.tight_layout()  # 防止x轴标签被截断
plt.show()

简化方案:用pandas自带绘图

如果不想写太多matplotlib代码,也可以直接用pandas的plot方法,它会自动处理datetime类型:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

df4['tanggal_dt'] = df4['tanggal'].dt.to_timestamp()
df4 = df4.sort_values('tanggal_dt')
ax = df4.plot(x='tanggal_dt', y='jumlah', lw=2, rot=45)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
ax.xaxis.set_major_locator(mdates.MonthLocator())
plt.tight_layout()
plt.show()

报错原因说明

你之前的代码用df5.month作为x轴,这只是单独的月份数字(1-12),丢失了年份信息,而且matplotlib无法将普通数字识别为日期轴,所以mdates.DateFormatter会报错“未告知轴正在绘制日期”。转换为datetime类型后,matplotlib会自动将x轴标记为日期轴,格式化工具就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:21:00