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
相关产品推荐
相关产品推荐

