如何旋转statsmodels中seasonal_decompose()生成的所有图表X轴标签?
如何修改seasonal_decompose所有子图的X轴标签旋转角度?
你遇到的问题很常见:直接用plt.xticks(rotation=90)只会对当前活跃的子图生效,也就是seasonal_decompose绘制的最后一个子图——残差图。要让所有四个子图(观测值、趋势、季节项、残差)的X轴标签都旋转90度,你需要遍历每个子图单独设置。
这里有两种简单的解决方法:
方法一:手动创建子图并逐个绘制分解结果
这种方法更灵活,能完全控制每个子图的样式:
from statsmodels.tsa.seasonal import seasonal_decompose import matplotlib.pyplot as plt # 执行时间序列分解 result = seasonal_decompose(df, model='additive', freq=3) # 创建4行1列的子图布局,可按需调整画布大小 fig, axes = plt.subplots(4, 1, figsize=(10, 8)) # 把分解结果分别绘制到对应子图 result.observed.plot(ax=axes[0], title='Observed') result.trend.plot(ax=axes[1], title='Trend') result.seasonal.plot(ax=axes[2], title='Seasonal') result.resid.plot(ax=axes[3], title='Residual') # 遍历所有子图,设置X轴标签旋转90度 for ax in axes: ax.tick_params(axis='x', labelrotation=90) # 自动调整子图间距,避免标题、标签重叠 plt.tight_layout() plt.show()
方法二:直接获取自动生成的所有子图
如果你不想手动绘制,也可以直接获取result.plot()返回的Figure对象,再遍历里面的子图:
from statsmodels.tsa.seasonal import seasonal_decompose import matplotlib.pyplot as plt result = seasonal_decompose(df, model='additive', freq=3) # 生成分解图并获取对应的Figure对象 fig = result.plot() # 获取Figure中的所有子图实例 axes = fig.get_axes() # 逐个设置每个子图的X轴标签旋转角度 for ax in axes: ax.tick_params(axis='x', labelrotation=90) plt.show()
核心原因就是plt.xticks()只对当前处于“活跃状态”的子图生效,而seasonal_decompose.plot()会依次绘制四个子图,最后活跃的是残差图,所以只有它的X轴标签被修改。通过遍历所有子图,就能确保每个子图的X轴标签都按需求旋转啦。
内容的提问来源于stack exchange,提问作者Dumb ML
相关产品推荐
相关产品推荐

