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

matplotlib时间序列等距绘制及分类轴标签自动精简问题咨询

详情说明

我有一份月度时间序列数据,想要绘制成柱状图。我遇到的问题是matplotlib.pyplot会自动将数据绘制在时间轴上:

import matplotlib.pyplot as plt
import pandas as pd
fig, ax = plt.subplots(1, 1)
s = pd.Series(range(3,7), pd.date_range('2021', freq='MS', periods=4))
ax.bar(s.index, s.values, 27) # 柱宽设置为27天
ax.set_ylabel('收入[欧元]')

时间轴绘制柱状图示例
通常这是符合需求的,但针对月度数据时显示效果会很奇怪,因为2月的天数明显更短。我想要实现数据的等距绘制,请问有没有办法强制设置该效果?
重要的是,我希望保留x轴过于拥挤时只显示第2个或第3个标签的特性,不需要手动调整。

不适用的方案
  • 我可以通过调整柱状图宽度让柱间间隙保持一致,但我绘制的是营收数据,不一致的柱宽会对阅读者产生误导。
  • 我可以将时间戳转为字符串,让数据按分类数据绘制:
s = pd.Series(range(3,7), pd.date_range('2021', freq='MS', periods=4))
x = [f'{ts.year}-{ts.month:02}' for ts in s.index]
ax.bar(x, s.values, 0.9) # 柱宽现在为数据点间距的占比

分类轴绘制柱状图示例
但这种方式会导致matplotlib默认展示所有标签,标签过多时会非常拥挤:

s = pd.Series(range(3,17), pd.date_range('2021', freq='MS', periods=14))
x = [f'{ts.year}-{ts.month:02}' for ts in s.index]
ax.bar(x, s.values, 0.9) # 柱宽现在为数据点间距的占比

分类轴标签拥挤示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:12:03