1 前言
我们组做数据分析的时候,总会有人去找赵老师。他是那种你给他一句需求,他能顺手写出半页 R 代码的狠人。尤其是在科研绘图这块,他对配色、线条、字体、版面都有强迫症级别的追求。
前段时间,他整理了一套“多图自动拼接”的模板代码,能把常见的四张图组合成一个 ABCD 四宫格。结果第二天就听他无奈地说:
“怎么大家还是去 PPT 里拼图?我这套自动化流程是不是白写了?”
学生们其实也不是嫌弃 R,只是大家真的不太喜欢在 R 里面直接拼图。
今天的更新,我就把原因拆开讲讲,同时给你一个真正好用的 R 拼图流程,避免赵老师的代码继续被“浪费”。
2 为什么很多人不喜欢在 R 里拼图?
大家不是不用 R,只是 R 拼图有一些真实存在的“小痛苦”:
- 语法太多,选哪个都纠结:
patchwork、cowplot、ggpubr、gridExtra,每个都能拼,但写法完全不同。 - 拼出来常常不协调:
字体、配色、边距、轴线粗细一旦不统一,整体就显得“散”。 - 高分辨率导出麻烦:
尺寸、dpi、字体比例需要来回试,导一次图就像打一次补丁。 - 调参数反馈不实时:
一点点 spacing、margin 都要重新跑代码,很消耗耐心。
3 为什么有些人还是更喜欢 PPT 拼图?
因为 PPT 的体验实在太友好了:
-
拖一拖,放一放就能组合 -
字体大小、间距、对齐线都能手动调 -
不需要记语法 -
反馈即时,看哪里不顺眼立刻改
这些都是初学者非常依赖的优势。
但 PPT 拼图有一个绝对致命的问题:
导出图片分辨率太低,期刊完全不够用。
4 分享赵老师的解决方案:
下面就是赵老师那套“够用十年”的 R 拼图流程。
4.1 统一主题(统一色系、字体、线条)
library(ggplot2)
library(patchwork)
# Nature 风配色
nature_pal <- c(
setosa = "#4C72B0",
versicolor = "#55A868",
virginica = "#C44E52"
)
# 统一主题
theme_set(
theme_classic(base_size = 14) +
theme(
axis.line = element_line(color = "black"),
panel.grid = element_blank(),
plot.title = element_text(hjust = 0.5, size = 14),
axis.text = element_text(color = "black")
)
)
4.2 绘制四张子图(A / B / C / D)
# 图 A:箱线图
pA <- ggplot(iris, aes(Species, Sepal.Length, fill = Species)) +
geom_boxplot(width = 0.6, alpha = 0.8, color = "black") +
scale_fill_manual(values = nature_pal, guide = "none") + # 这里保留图例
labs(x = "", y = "Sepal Length") +
theme(
axis.text.x = element_text(angle = 45, hjust = 1) # X 轴文字倾斜
)
# 图 B:小提琴图
pB <- ggplot(iris, aes(Species, Petal.Length, fill = Species)) +
geom_violin(trim = FALSE, alpha = 0.7, color = "black") +
scale_fill_manual(values = nature_pal, guide = "none") + # 不显示图例
labs(x = "", y = "Petal Length") +
theme(
axis.text.x = element_text(angle = 45, hjust = 1) # X 轴文字倾斜
)
# 图 C:散点图
pC <- ggplot(iris, aes(Sepal.Length, Petal.Length, color = Species)) +
geom_point(alpha = 0.7, size = 2) +
scale_color_manual(values = nature_pal, guide = "none") + # 不显示图例
labs(x = "Sepal Length", y = "Petal Length")
# 图 D:趋势图
pD <- ggplot(iris, aes(Sepal.Width, Petal.Width, color = Species)) +
geom_point(alpha = 0.7, size = 2) +
geom_smooth(method = "lm", se = FALSE, linewidth = 0.8) +
scale_color_manual(values = nature_pal, name = "Species") + # 不显示图例
labs(x = "Sepal Width", y = "Petal Width")
4.3 拼接 ABCD 四宫格 + 自动标签 + 高清导出
combined_figure <- (pA + pB + pC + pD) +
plot_layout(ncol = 2, nrow = 2) +
plot_annotation(
tag_levels = "A",
theme = theme(
plot.tag = element_text(
size = 16,
face = "bold",
hjust = -0.2,
vjust = 1
)
)
)
ggsave(
"figure_ABCD_nature_style.png",
combined_figure,
width = 8,
height = 6,
dpi = 300
)
combined_figure
运行这一段,你就能得到一张:
-
风格统一 -
标签专业 -
配色高级 -
分辨率合格的 Nature 风四宫格大图
5 小结
R 拼图的体验确实不如 PPT 顺手,特别是在便利性上,但是胜在可以和绘图过程无缝衔接,并且没有分辨率太低的缺点。上面这套 ABCD 模板能满足绝大部分文章的需求,感兴趣的朋友欢迎拿去练习!
感谢关注,你的支持是我不懈的动力!

