如何在R中将多个独立图表输出到同一个PDF文件中
R语言多条形图合并输出PDF解决方案
原有代码错误点
- 语法缺失:
sapply()函数未补充右闭合括号,运行直接抛出语法错误 - 逻辑不匹配:你单个条形图的输入是命名向量,但循环内的代码是针对数据框做切片、转置操作,和你实际的数据结构完全不兼容
- 未定义变量:循环内用到的
sp、barcols都没有提前赋值,运行会提示对象未找到 - 参数设置错误:单图的y轴范围为0-50,循环内误写为0-0.4,就算跑通也看不到条形
- 遗漏设备关闭命令:R中打开PDF图形设备后必须执行
dev.off(),否则输出的PDF文件是损坏/空白的
最简可运行实现
你所有图表逻辑一致,直接用par(mfrow)设置布局+循环绘图即可,完全不需要复杂的矩阵转换,适合初学者使用:
# ---------------------- 第一步:提前准备你的6组数据和对应标题 ---------------------- # 替换下面的data2~data6为你剩余5个图的实际数据源变量名 plot_datalist <- list( druhy, data2, data3, data4, data5, data6 ) # 替换下面的标题为你6个图的实际主标题,顺序和上面的数据一一对应 plot_titles <- c( "Míváš často chuť na svíčkovou?", "你的第2个图表标题", "你的第3个图表标题", "你的第4个图表标题", "你的第5个图表标题", "你的第6个图表标题" ) # 统一的配色和图例,你所有图通用 bar_cols <- c("red", "blue", "green", "black", "yellow") legend_text <- c("ano", "spíše ano", "nevím", "spíše ne", "ne") # ---------------------- 第二步:设置PDF输出和布局 ---------------------- # 打开PDF设备,可自行调整width和height适配排版 pdf("6_barplots_output.pdf", width = 10, height = 14) # 设置3行2列的图表布局,mar参数调整边距避免标题、图例被截断 par(mfrow = c(3, 2), mar = c(4, 4, 3, 2)) # ---------------------- 第三步:循环绘制所有图表 ---------------------- for (i in seq_along(plot_datalist)) { # 直接用你原本的单图绘图逻辑,不需要修改 barplot(plot_datalist[[i]], ylim = c(0, 50), # 可根据你的数据最大值自行调整,比如最大数值是10就设为0-15 main = plot_titles[i], col = bar_cols) # 添加图例,cex参数缩小图例避免占太多空间 legend("topleft", legend = legend_text, fill = bar_cols, cex = 0.8) } # ---------------------- 第四步:关闭PDF设备,必须执行! ---------------------- dev.off()
运行完成后你工作目录下就会生成包含6个3行2列排布条形图的PDF文件。
内容的提问来源于stack exchange,提问作者Hana Liškařová
相关产品推荐
相关产品推荐

