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

如何旋转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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:27:29