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

如何在R中使用ggplot2/fGarch绘制偏态与正态数据并合并三张图

多图合并实现方案

可行性说明

完全可以通过ggplot2或fGarch实现需求,其中ggplot2搭配patchwork拼接子图的方案灵活度更高,支持自定义样式、布局比例;fGarch结合R基础绘图系统的布局设置适合快速出图场景。

方案1:ggplot2实现(推荐)

操作步骤如下:

  • 第一步:加载依赖包,需要用到ggplot2(绘图)、patchwork(子图拼接)、fGarch(生成GARCH类模拟数据,如果你有自己的模拟数据可以跳过该包)
  • 第二步:生成模拟数据,这里以常用的GARCH(1,1)时序数据为例
# 加载包
library(ggplot2)
library(patchwork)
library(fGarch)

# 生成GARCH(1,1)模拟数据
garch_spec <- garchSpec(model = list(omega = 0.01, alpha = 0.12, beta = 0.82), cond.dist = "std")
sim_seq <- garchSim(garch_spec, n = 1200)
sim_df <- data.frame(
  t = 1:1200,
  yield = as.numeric(sim_seq),
  vol = as.numeric(volatility(sim_seq))
)
  • 第三步:分别绘制三张目标子图,这里以收益率时序图、波动率时序图、收益率平方ACF图为例
# 子图1:收益率时序图
p1 <- ggplot(sim_df, aes(x = t, y = yield)) +
  geom_line(linewidth = 0.3, color = "#2c3e50") +
  labs(title = "收益率序列", x = "时间", y = "收益率") +
  theme_bw()

# 子图2:条件波动率时序图
p2 <- ggplot(sim_df, aes(x = t, y = vol)) +
  geom_line(linewidth = 0.3, color = "#e74c3c") +
  labs(title = "条件波动率序列", x = "时间", y = "波动率") +
  theme_bw()

# 子图3:收益率平方自相关图
acf_res <- acf(sim_df$yield^2, plot = F, lag.max = 20)
acf_df <- data.frame(lag = acf_res$lag, acf_val = acf_res$acf)
conf_line <- 1.96/sqrt(nrow(sim_df))
p3 <- ggplot(acf_df, aes(x = lag, y = acf_val)) +
  geom_hline(yintercept = 0, color = "black") +
  geom_hline(yintercept = c(-conf_line, conf_line), linetype = "dashed", color = "gray60") +
  geom_segment(aes(xend = lag, yend = 0), color = "#3498db", linewidth = 0.8) +
  labs(title = "收益率平方ACF图", x = "滞后阶数", y = "ACF值") +
  theme_bw()
  • 第四步:拼接子图到同一画布,可自由调整排布方式
# 3行1列垂直排布
p_combined <- p1 / p2 / p3
# 若需要调整高度比例,可加plot_layout参数,比如三张图高度比为2:2:1
# p_combined <- p1 / p2 / p3 + plot_layout(heights = c(2,2,1))

# 输出合并图
print(p_combined)

方案2:fGarch结合基础绘图系统实现

不需要自定义样式的场景可以直接用fGarch自带的绘图函数,配合基础绘图系统的布局参数实现合并:

library(fGarch)
# 沿用上方生成的sim_seq模拟数据
# 设置画布为3行1列布局
par(mfrow = c(3,1), mar = c(3,4,2,1))
# 依次绘制三张目标图,which参数对应fGarch绘图的输出类型,可按需调整
plot(sim_seq, which = 1) # 收益率时序图
plot(sim_seq, which = 2) # 标准化残差时序图
plot(sim_seq, which = 6) # 收益率ACF图
# 绘图完成后恢复默认布局
par(mfrow = c(1,1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:45:09