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

R语言调用pdf()函数时如何为同一PDF内不同页面设置不同方向

实现方案

基础R的pdf()设备初始化后全局页面尺寸就固定了,不支持在同一个设备内直接给不同页面单独设置方向/宽高,下面两个方案都可以实现需求,按需选择即可:

方案1:分单页生成后合并(推荐,100%兼容所有绘图场景)

这个方案不需要调整原有绘图逻辑,把不同方向的图表分别输出为单页临时PDF,最后合并为目标文件即可,基础plot、ggplot2、lattice等所有绘图方式都适用,生成的文件能被PDF阅读器自动识别每页方向,不会出现排版错位。
如果没装pdftools包先运行安装命令,已安装可跳过:
install.packages("pdftools")

可直接运行的示例代码:

library(pdftools)
# 生成临时文件存放单页PDF
page1 <- tempfile(fileext = ".pdf")
page2 <- tempfile(fileext = ".pdf")

# 第一页:纵向,按需求设置宽高(高>宽即为纵向)
pdf(file = page1, width = 5, height = 8)
plot(x = 1:10, 
     y = 1:10)
abline(v = 0)
text(x = 0, y = 1, labels = "Random text")
dev.off()

# 第二页:横向,交换宽高即可(宽>高即为横向)
pdf(file = page2, width = 8, height = 5)
plot(x = 20:40,
     y = 10:30)
dev.off()

# 合并所有单页到目标输出路径
pdf_combine(c(page1, page2), output = "/Downloads/My Plot.pdf")

# 清理临时文件
unlink(c(page1, page2))

需要加更多页的话,按同样逻辑新增临时文件、绘图、加入合并列表即可。

方案2:单设备调整图区参数(无额外依赖,仅适合简单基础绘图)

如果不想安装第三方包,可以在初始化pdf()设备时设置足够容纳横、纵两种尺寸的正方形页面,之后每页通过par()调整绘图区域的宽高比,模拟横/纵排版效果。缺点是实际页面尺寸始终是固定的正方形,PDF阅读器无法自动识别页面方向,需要手动旋转,且边距需要反复调试,容易出现多余空白,对排版精度要求高的场景不推荐。
示例代码:

# 初始化设备时设置足够大的正方形页面
pdf(file = "/Downloads/My Plot.pdf", width = 8, height = 8)

# 第一页:纵向绘图区
par(pin = c(4, 7), mar = c(4,4,2,2))
plot(x = 1:10, 
     y = 1:10)
abline(v = 0)
text(x = 0, y = 1, labels = "Random text")

# 第二页:横向绘图区
par(pin = c(7, 4), mar = c(4,4,2,2))
plot(x = 20:40,
     y = 10:30)

dev.off()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:21:30