如何在Base R中垂直排列时间序列分解图(仿ggplot2布局)
将stR分解图改为垂直单列布局的方法
stR包的plot(components(fit))默认使用两列布局,要改成垂直单列,你可以手动控制绘图布局,或者提取组分后用ggplot2重构绘图,具体方法如下:
方法一:用Base R手动控制布局
- 先提取分解后的组分对象:
comp <- components(fit)
- 设置5行1列的绘图布局(匹配mstl的5个分解组分),同时调整边距避免标签重叠:
par(mfrow = c(5, 1), mar = c(2, 4, 1, 1))
- 逐个绘制每个组分:
plot(comp[, 1], main = names(comp)[1], xlab = "", ylab = "") plot(comp[, 2], main = names(comp)[2], xlab = "", ylab = "") plot(comp[, 3], main = names(comp)[3], xlab = "", ylab = "") plot(comp[, 4], main = names(comp)[4], xlab = "", ylab = "") plot(comp[, 5], main = names(comp)[5], xlab = "", ylab = "")
如果你需要更灵活的布局控制,也可以用layout()替代par(mfrow):
layout(matrix(1:5, ncol = 1)) # 重复上面的5行plot代码即可
方法二:用ggplot2重构绘图(风格更贴近autoplot)
如果习惯ggplot2的可视化风格,可以把组分转换为数据框后绘制:
library(ggplot2) library(tidyr) # 将组分对象转为长格式数据框 comp_df <- as.data.frame(comp) %>% mutate(Date = time(comp)) %>% pivot_longer(-Date, names_to = "Component", values_to = "Value") # 生成垂直单列的分解图 ggplot(comp_df, aes(x = Date, y = Value)) + geom_line() + facet_wrap(~Component, ncol = 1, scales = "free_y") + theme_minimal()
内容的提问来源于stack exchange,提问作者Saïd Maanan
相关产品推荐
相关产品推荐

