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

使用DataFrame.plot.bar绘制柱状图时日期型xticks显示异常的解决

修复pandas堆叠柱状图日期轴显示整数的问题

当你用df.plot.bar(x="Date", stacked=True)绘制堆叠柱状图时,pandas会把日期列当作分类变量处理,x轴底层实际是从0开始的整数索引,所以ax.get_xticks()返回的是[0,1,2]这类值,而非日期对应的数值。要显示正确的日期,需要手动替换x轴的刻度标签,下面是两种可行的修复方法:

方法一:绘图后手动设置刻度标签

绘制柱状图后,获取当前x轴刻度位置,将对应的日期格式化为所需样式,再设置为刻度标签:

import matplotlib.pyplot as plt
import datetime as dt
import pandas as pd

y = [dt.date(2021, 12, 12), dt.date(2022, 6, 12), dt.date(2023, 12, 12)]
df = pd.DataFrame()
df["Date"] = y
df["V1"] = [0, 0.2, 0.8]
df["V2"] = [0.4, 0.3, 0.3]

# 绘制堆叠柱状图
ax = df.plot.bar(x="Date", stacked=True)
# 设置x轴刻度标签为格式化后的日期
ax.set_xticklabels(df["Date"].dt.strftime("%Y-%m-%d"), rotation=45)
# 调整布局防止标签被截断
plt.tight_layout()
plt.show()

方法二:将日期设为索引后绘图

先把Date列设为DataFrame的索引,再绘制柱状图,配合matplotlib日期格式化工具优化显示:

import matplotlib.pyplot as plt
import datetime as dt
import pandas as pd
from matplotlib.dates import DateFormatter

y = [dt.date(2021, 12, 12), dt.date(2022, 6, 12), dt.date(2023, 12, 12)]
df = pd.DataFrame()
df["Date"] = y
df["V1"] = [0, 0.2, 0.8]
df["V2"] = [0.4, 0.3, 0.3]

# 将Date设为索引
df.set_index("Date", inplace=True)
# 绘制堆叠柱状图
ax = df.plot.bar(stacked=True)
# 设置日期显示格式
date_form = DateFormatter("%Y-%m-%d")
ax.xaxis.set_major_formatter(date_form)
# 旋转标签避免重叠
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

补充说明

  • 方法一更直接,适合快速调整;方法二更贴合pandas索引式绘图逻辑,方便后续对日期轴做更多自定义。
  • rotation=45用于避免日期标签过长重叠,tight_layout()自动调整图表布局,防止标签被截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:02:12