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

如何在绘图X轴显示日期?Pandas绘图尝试后遇问题

解决日期索引绘图的问题

咱们一步步来解决你遇到的两个问题:

第一个问题:设置索引后X轴还是显示0-17的浮点数

你用df.set_index('Week')之后直接调用df.plot(),其实这里有个小坑——pandas的set_index默认不会修改原DataFrame,它会返回一个新的、已经改好索引的DataFrame,但你没把这个结果存回df里,所以后面绘图用的还是原来的默认整数索引(0到17)。

解决起来很简单,二选一就行:

  • 把修改后的结果重新赋值给df:
df = df.set_index('Week')
df.plot()
plt.show()
  • 用inplace=True直接修改原DataFrame:
df.set_index('Week', inplace=True)
df.plot()
plt.show()

第二个问题:转datetime后绘图报错ValueError: ordinal must be >= 1

这个错误一般是因为日期转换出问题了——要么是转换后的列里有无效的日期值(比如NaT),要么是matplotlib没正确识别你的datetime索引。咱们按步骤排查:

第一步:确保日期转换完全成功

先把Week列转成datetime类型,同时检查有没有转失败的情况:

# 转换时用errors='coerce',把识别不了的日期转成NaT,方便我们检查
df['Week'] = pd.to_datetime(df['Week'], errors='coerce')
# 看看有多少转失败的日期
print(df['Week'].isna().sum())

如果输出是0,说明所有日期都转成功了;如果大于0,那你得先清理Week列里的无效日期格式。

第二步:设置索引并正常绘图

转换没问题的话,设置索引再绘图,还可以给x轴日期加个旋转,避免标签挤在一起:

# 设置datetime为索引
df = df.set_index('Week')
# 绘图
ax = df.plot()
# 旋转x轴日期标签,让它更易读
plt.xticks(rotation=45)
plt.tight_layout()  # 防止日期标签被截断
plt.show()

备选方案:不用改索引,直接指定x轴

如果你不想动索引,也可以在绘图的时候直接指定x轴为Week列,这样更直观:

# 先转成datetime
df['Week'] = pd.to_datetime(df['Week'])
# 绘图时指定x参数
df.plot(x='Week')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

这样应该就能顺利画出以日期为X轴、三列数据为Y轴的图啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:29:48