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

如何在Python Pandas绘图中用日期范围替换X轴单个日期

解决Pandas图表X轴替换为日期范围的问题

方案一:保留日期索引,替换刻度标签

这种方式保留原始日期索引(保证X轴的时间顺序正确),仅将刻度文本替换为日期范围:

import pandas as pd

# 生成开始和结束日期
df['StartDate'] = pd.to_datetime("2022" + df['WeekNumber'].astype(str) + "1",  format='%G%V%w')
df['EndDate'] = df['StartDate'] + pd.offsets.Week(weekday=6)

# 创建日期范围标签,按需求格式化日期
# 若需要不带前导零的日期,Linux/macOS用'%Y-%-m-%-d',Windows用'%Y-%#m-%#d'
df['DateRange'] = df['StartDate'].dt.strftime('%Y-%m-%d') + ' - ' + df['EndDate'].dt.strftime('%Y-%m-%d')

# 以StartDate为索引,仅删除WeekNumber列(保留DateRange用于替换标签)
df = df.set_index("StartDate").drop(columns=["WeekNumber"])

# 绘制折线图并获取轴对象
ax = df.plot(kind="line", legend=False, xlabel="Date", ylabel="hrs")

# 将X轴刻度替换为日期范围标签
ax.set_xticklabels(df['DateRange'])

方案二:直接使用日期范围作为X轴

如果不需要保留日期索引,可以直接将生成的日期范围字符串作为X轴数据源:

import pandas as pd

df['StartDate'] = pd.to_datetime("2022" + df['WeekNumber'].astype(str) + "1",  format='%G%V%w')
df['EndDate'] = df['StartDate'] + pd.offsets.Week(weekday=6)
df['DateRange'] = df['StartDate'].dt.strftime('%Y-%m-%d') + ' - ' + df['EndDate'].dt.strftime('%Y-%m-%d')

# 直接指定x为日期范围列,y为需要绘制的数值列(替换为你实际的列名,比如'hrs')
df.plot(kind="line", x='DateRange', y='hrs', legend=False, xlabel="Date", ylabel="hrs")

注意事项

  • 日期格式可按需调整:strftime参数控制显示形式,%Y-%m-%d生成2022-08-15,若要去掉前导零(如2022-8-15),需根据操作系统调整格式符。
  • 确保DateRange的数量与X轴刻度数量一致,避免标签错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:05:17