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

R Markdown PDF中irf()生成的脉冲响应函数图截断问题求解

修复脉冲响应图截断及单独堆叠展示的方法

一、修复PDF中第二张图的截断问题

1. 调整PDF页面边距

在R Markdown的YAML头部增加geometry参数,扩大底部边距给第二张图留出空间:

---
title: "脉冲响应分析结果"
output:
  pdf_document:
    geometry: margin=1.5in  # 可根据实际情况调整边距大小
---

2. 调整绘图参数缩小元素尺寸

调用plot.irf时,通过par.mar调整图的边距,或用cex.axis、cex.main缩小字体,减少图的整体占用空间:

# 假设你的IRF对象为irf_result
plot(irf_result, 
     par.mar = c(3.5, 3.5, 2, 1),  # 调整上下左右边距(下、左、上、右)
     cex.axis = 0.8,  # 缩小坐标轴字体
     cex.main = 0.9)  # 缩小标题字体

二、单独调用每张图并上下堆叠展示

如果which参数之前使用失败,可能是用法有误,以下是三种可靠的堆叠方法:

方法1:基础绘图系统(vars包默认)

利用recordPlot保存单张图,再用grid包组合布局:

library(vars)
library(grid)

# 构建VAR模型及IRF对象(示例数据)
data(Canada)
var_model <- VAR(Canada, p = 2, type = "const")
irf_result <- irf(var_model)

# 分别绘制并保存两张图
plot(irf_result, which = 1)
plot1 <- recordPlot()

plot(irf_result, which = 2)
plot2 <- recordPlot()

# 组合为2行1列的布局
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 1)))
print(plot1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
print(plot2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1))

方法2:ggplot2风格绘图(需ggirf支持)

如果使用ggirf生成ggplot对象,用patchwork包快速堆叠:

library(vars)
library(ggplot2)
library(patchwork)

# 构建模型及IRF对象
data(Canada)
var_model <- VAR(Canada, p = 2, type = "const")
irf_result <- irf(var_model)

# 提取单张ggplot图并堆叠
p1 <- ggirf(irf_result, which = 1)
p2 <- ggirf(irf_result, which = 2)

# 上下堆叠展示
p1 / p2

方法3:手动设置绘图布局

直接用par(mfrow)指定2行1列的绘图区域,依次绘制两张图:

# 设置2行1列的布局
par(mfrow = c(2, 1))
plot(irf_result, which = 1)
plot(irf_result, which = 2)
# 恢复默认布局
par(mfrow = c(1, 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:52:56