

为了避免各位错过最新的推文教程,强烈建议大家将“科研后花园”设置为“星标”!


用了ggplot2这么久,你可能遇到过这些问题:散点图标签总是挤成一团、想给图加上显著性星号却不知道从哪下手、想把几个图拼在一起结果折腾半天……别急着换工具!ggplot2的真正强大之处,在于它庞大的拓展包生态。这些拓展包就像一个个“外挂插件”,装进去,你的ggplot2瞬间就能解锁新技能。今天这篇文章,我们精选了一些最常用的拓展包,每个包都告诉你:它能解决什么问题、怎么装、代码怎么写、有哪些坑要避开。一篇在手,绘图无忧!
为什么需要这些拓展包?ggplot2本身已经非常强大,但它的设计哲学是“核心够稳,功能靠扩展”。在实际科研绘图中,我们经常会遇到一些“边缘需求”:
标签太多,点与点之间的文字叠在一起 → ggrepel
需要展示分布的“山峰”变化 → ggridges
想在一个图里看所有变量之间的关系 →GGally
想让静态图动起来,展示随时间的变化 →gganimate
这些问题,ggplot2自己解决不了,但通过一个拓展包,往往一行代码就能搞定。根据R包流行度统计,ggrepel、patchwork、ggpubr等包长期位居下载量前列。而且,官方画廊(https://exts.ggplot2.tidyverse.org/gallery/)已经收录了上百个扩展包,涵盖几乎所有你能想到的绘图场景。
一句话总结:拓展包 = ggplot2的“功能插件”,装即用,用完即走,不会干扰原有的绘图语法。

一句话功能:提供ggplot2原生没有的各种几何对象(geoms)和统计变换。
适合画什么:
Voronoi图(泰森多边形):空间数据分析中常用
平行集图(Parallel Sets):展示多个分类变量之间的关系
圆填充图(Circle Packing):展示层级结构,如分类学的嵌套关系
分页分面:当分面数量太多时,可以将分面拆分到多个页面
安装与基本用法:
install.packages("ggforce")library(ggforce)# Voronoi图(泰森多边形)ggplot(iris, aes(Sepal.Length, Sepal.Width, group = -1L)) +geom_voronoi_tile(aes(fill = Species)) +geom_voronoi_segment() +geom_text(aes(label = after_stat(nsides), size = after_stat(vorarea)),stat = 'delvor_summary', switch.centroid = TRUE)# 平行集图data <- reshape2::melt(Titanic)data <- gather_set_data(data, 1:4)ggplot(data, aes(x, id = id, split = y, value = value)) +geom_parallel_sets(aes(fill = Sex), alpha = 0.3, axis.width = 0.1) +geom_parallel_sets_axes(axis.width = 0.1) +geom_parallel_sets_labels(colour = 'white')


注意事项:
geom_voronoi_tile() 会计算泰森多边形,大数据集时计算量较大
geom_parallel_sets 输入数据需要特殊格式,通常使用 gather 先整理
官网:https://ggforce.data-imaginist.com/

一句话功能:通过“斥力算法”自动调整文本标签位置,让标签不再互相重叠。
核心原理:每个标签之间、标签与数据点之间、标签与绘图边界之间都设置了排斥力,经过多次迭代计算后找到一个“不打架”的位置。
适合画什么:
火山图中需要标注显著基因名称
PCA图中标注样本ID
任何散点图中需要标注的场合
安装与基本用法:
# The easiest way to get ggrepel is to install it from CRAN:install.packages("ggrepel")# Or get the latest development version from GitHub:# install.packages("devtools")devtools::install_github("slowkow/ggrepel")library(ggrepel)# 基础用法:标签会自动弹开,避免重叠ggplot(mtcars,aes(wt, mpg, label = rownames(mtcars), colour = factor(cyl))) +geom_point()+geom_text_repel()# 替代 geom_text()# 带背景框的标签(更适合在密集图中突出显示)ggplot(mtcars,aes(wt, mpg, label = rownames(mtcars), colour = factor(cyl))) +geom_point()+geom_label_repel()


常用参数:
max.overlaps = Inf:确保所有标签都显示(默认会隐藏重叠过多的标签)
box.padding:标签框的内边距
point.padding:标签与对应数据点的距离
force:排斥力强度,值越大标签弹得越远
nudge_x / nudge_y:手动微调标签位置
注意事项:
数据量很大(>1000个点)且要标注全部点时,geom_text_repel 计算会很慢,建议只标注少数关键点
使用max.overlaps = Inf时要小心,当标签实在太多时,即使全部强制显示也会出现重叠
官网:https://ggrepel.slowkow.com/

一句话功能:提供一系列现成函数,几行代码就能画出带统计检验结果的发表级图表,特别适合生物医学领域。
适合画什么:
带显著性星号的箱线图/柱状图
带回归线和置信区间的散点图
多图拼合
安装与基本用法:
install.packages("ggpubr")library(ggpubr)# 箱线图 + 自动添加显著性标记ggboxplot(ToothGrowth, x = "supp", y = "len",color = "supp", palette = "npg", add = "jitter") +stat_compare_means() # 自动计算p值并标注# 指定需要比较的组(列表形式)my_comparisons <- list( c("0.5", "1"), c("1", "2"), c("0.5", "2") )ggboxplot(ToothGrowth, x = "dose", y = "len",color = "dose", palette = "npg")+# Add pairwise comparisons p-valuestat_compare_means(comparisons = my_comparisons, label.y = c(29, 35, 40))+stat_compare_means(label.y = 45)


常用参数:
method:选择统计检验方法,可选 "t.test"、"wilcox.test"、"anova" 等
label:"p.format" 显示完整p值,"p.signif" 显示星号(*、**、***)
comparisons:指定需要比较的组,必须为列表格式
注意事项:
当分组变量有3个及以上时,stat_compare_means() 默认会做整体检验(ANOVA或Kruskal-Wallis),不会自动做两两比较,需要手动指定 comparisons
多个比较时需要校正p值,可以设置 p.adjust.method = "bonferroni"
官网:https://rpkgs.datanovia.com/ggpubr/
一句话功能:提供《经济学人》、华尔街日报、FiveThirtyEight、Stata、Excel等几十种现成主题风格,一键切换,不用自己调参数。
适合画什么:任何需要快速套用专业主题风格的图表,尤其适合需要在不同风格间快速切换的场景。
安装与基本用法:
install.packages("ggthemes")library(ggthemes)# 直接套用《经济学人》杂志风格ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +geom_point(size = 3) +theme_economist() +scale_fill_economist()# FiveThirtyEight风格(NBA数据分析网站)ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +geom_point(size = 3) +theme_fivethirtyeight()# 华尔街日报风格ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +geom_point(size = 3) +theme_wsj()



常用主题:
theme_economist():《经济学人》风格,白色背景,蓝色参考线,适合财经类图表
theme_fivethirtyeight():FiveThirtyEight网站风格,深灰色背景
theme_wsj():华尔街日报风格
theme_stata():模仿Stata软件的默认风格
theme_excel():模仿Excel图表风格
注意事项:
部分主题(如 theme_economist())的字体可能需要单独安装,否则会fallback到系统默认字体
期刊投稿时建议使用 theme_bw() 或 theme_classic() 等简洁主题,避免过度装饰影响评审
官网:https://github.com/jrnold/ggthemes
一句话功能:绘制部分重叠的密度曲线,形成山脉一样的轮廓,非常适合展示多个分布的对比。
适合画什么:
不同年份/不同海拔的物种丰度分布变化
多组数据的密度对比(如不同处理组的表达量分布)
季节性变化趋势(如全年各月的观测数据)
安装与基本用法:
install.packages("ggridges")library(ggridges)# 脊线图:不同品种的鸢尾花花瓣长度分布ggplot(iris, aes(x = Petal.Length, y = Species, fill = Species)) +geom_density_ridges() # 核心函数

常用参数:
scale:控制山峰之间的重叠程度,值越大山峰越高,重叠越少
alpha:填充透明度,多个分布重叠时非常有用
jittered_points:是否在密度曲线上叠加原始数据点
注意事项:
如果数据分布差异很大(比如一个峰在0-10,另一个在1000-2000),脊线图的x轴可能会被拉得很长,建议对x轴进行log转换
默认情况下,y轴按照因子的原始顺序排列,可以使用 fct_rev() 反转顺序
官网:https://wilkelab.org/ggridges/
一句话功能:用 +、/、| 等符号自由组合多个ggplot对象,像搭积木一样排列子图,彻底告别 gridExtra 的繁琐代码。
适合画什么:任何需要多图拼合的场景,尤其适合需要复杂布局的论文图表。
安装与基本用法:
install.packages("patchwork")library(patchwork)# 最简单的拼图:横向并排p1 + p2 + p3# 复杂布局:上面两张并排,下面一张独占一行(p1 | p2) / p3# 指定各图的宽度比例(p1 + p2) + plot_layout(widths = c(2, 1)) # p1宽度是p2的2倍
常用操作符:
+:并排放置
/:上下堆叠
():组合子布局
高级功能:
plot_layout():控制布局的行列数和宽度/高度比例
plot_annotation():添加总标题、副标题和主题标签
&:将同一主题应用到所有子图(如 p1 + p2 & theme_minimal())
注意事项:
如果子图之间有相同的图例,可以使用 guides = "collect" 合并图例
坐标轴对齐:axes = "collect" 可以让多个子图的坐标轴对齐
官网:https://patchwork.data-imaginist.com/
一句话功能:快速绘制多变量矩阵图、平行坐标图等复杂图形,尤其适合探索性数据分析(EDA)。
适合画什么:
散点图矩阵:ggpairs() 一图展示所有变量两两关系,同时显示相关系数和密度分布
平行坐标图:ggparcoord() 展示每个观测在所有变量上的轨迹
网络图:ggnet() 和 ggnetwork() 绘制网络关系
安装与基本用法:
install.packages("GGally")library(GGally)# 散点图矩阵:对角=密度图,上三角=相关系数,下三角=散点图ggpairs(iris, aes(color = Species))# 自定义各区域显示的图形类型ggpairs(iris,upper = list(continuous = "cor"), # 上三角显示相关系数lower = list(continuous = "points"), # 下三角显示散点diag = list(continuous = "densityDiag")) # 对角线显示密度图


常用参数:
mapping:颜色映射,如 aes(color = group)
upper / lower / diag:控制上三角、下三角和对角线显示的图形类型
columns:指定要包含在矩阵中的列
注意事项:
ggpairs() 在变量较多时(>10列)会生成大量子图,运行速度较慢
可以通过 columns = c(1,2,3) 限制分析的变量数量
官网:https://ggobi.github.io/ggally/
一句话功能:支持Markdown和HTML语法,让你在标题、标签中使用斜体、上标、彩色文字,彻底解决“基因名怎么斜体”的痛点。
适合画什么:
需要写斜体物种名的生物学图表
需要上标(如 R²、10⁶)的统计图表
需要在标题中混合颜色和样式的图形
安装与基本用法:
install.packages("ggtext")library(tidyverse)library(ggtext)df <- tibble(label = rep("Lorem ipsum dolor **sit amet,** consectetur adipiscing elit,sed do *eiusmod tempor incididunt* ut labore et dolore magnaaliqua.", 2),x = c(0, .6),y = c(1, .6),hjust = c(0, 0),vjust = c(1, 0),orientation = c("upright", "right-rotated"),color = c("black", "blue"),fill = c("cornsilk", "white"))ggplot(df) +aes(x, y, label = label, color = color, fill = fill,hjust = hjust, vjust = vjust,orientation = orientation) +geom_textbox(width = unit(0.4, "npc")) +geom_point(color = "black", size = 2) +scale_discrete_identity(aesthetics = c("color", "fill", "orientation")) +xlim(0, 1) + ylim(0, 1)

核心函数:
element_markdown():用于主题中的文本元素(标题、轴标签等)
geom_richtext():替代 geom_label(),支持在图形内部添加富文本标签
注意事项:
Markdown语法中,斜体用 *文本*,粗体用 **文本**
HTML标签如 <span style='color:red'> 可以精确控制颜色
上标可以使用Markdown语法 ^上标^,或者HTML语法 <sup>上标</sup>
官网:https://wilkelab.org/ggtext/
一句话功能:提供Nature、Science、Lancet、NEJM等顶刊的官方配色方案,以及D3.js、Star Trek、Futurama等流行配色。
适合画什么:任何需要专业配色的图表,尤其是准备投稿SCI期刊时。
安装与基本用法:
install.packages("ggsci")library(ggsci)# 使用Nature出版集团配色ggplot(iris, aes(x = Petal.Length, y = Sepal.Width, color = Species)) +geom_point(size = 4)+scale_color_npg()# 使用《新英格兰医学杂志》配色ggplot(iris, aes(x = Petal.Length, y = Sepal.Width, color = Species)) +geom_point(size = 4)+scale_color_nejm()# AAAS(Science)配色ggplot(iris, aes(x = Petal.Length, y = Sepal.Width, color = Species)) +geom_point(size = 4)+scale_color_aaas()



常用调色板:
scale_color_npg():Nature出版集团经典配色(蓝金为主)
scale_color_aaas():AAAS(Science)配色,蓝色系为主
scale_color_nejm():NEJM配色,红色和蓝色对比强烈
scale_color_lancet():柳叶刀配色
scale_color_jco():美国临床肿瘤学会(ASCO)年会常用配色
scale_color_tron():《创战纪》科幻电影风格配色
注意事项:
离散颜色和连续颜色有不同函数:scale_color_npg() 用于离散,scale_color_gradient_npg() 用于连续
记得同时设置填充色:scale_fill_npg()
官网:https://nanx.me/ggsci/
一句话功能:大幅增强ggplot2的分面能力,支持嵌套分面、独立调整每个分面的坐标轴、按比例分配面板宽度等功能。
适合画什么:
嵌套分面:facet_nested() 让分面标签按层级分组,避免重复
独立坐标轴:每个分面可以有自己的坐标轴范围
自定义分面布局:facet_manual() 完全手动控制
安装与基本用法:
install.packages("ggh4x")library(ggh4x)# 模拟数据:嵌套分面set.seed(123)df_nest <- data.frame(Group = rep(c("Control", "Treatment"), each = 60),Species = rep(c("A", "B", "C"), times = 40),value = rnorm(120))# 嵌套分面:将层级分面标签自动合并,避免重复显示ggplot(df_nest, aes(x = Species, y = value, fill = Species)) +geom_boxplot() +facet_nested(~Group+Species, scales = "free", space = "free")

核心功能:
facet_nested():嵌套分面,标签自动合并
facet_nested_wrap():包装版的嵌套分面
facet_manual():完全手动定义分面的行和列布局
strip_nested():控制嵌套标签的样式和合并方式
guide_axis_nested():创建嵌套的坐标轴标签
注意事项:
scales = "free" 和 space = "free" 配合使用时,每个分面可以有不同的x轴范围和面板宽度
嵌套分面的标签合并规则可以通过 bleed 参数控制
官网:https://teunbrand.github.io/ggh4x/
一句话功能:在主散点图的边缘(X轴或Y轴外侧)添加密度图、直方图或箱线图,让读者同时看到分布信息。
适合画什么:散点图 + 边缘分布,常用于展示两个变量关系的同时,展示各自的分布特征。
安装与基本用法:
install.packages("ggExtra")library(ggExtra)p <- ggplot(iris, aes(x = Petal.Length, y = Sepal.Width, color = Species)) +geom_point(size = 4)# 添加边缘直方图(X轴和Y轴都添加)ggMarginal(p, type = "histogram", margins = "both",groupFill = T)# 添加边缘密度图(只添加X轴)ggMarginal(p, type = "density", margins = "x")# 调整边缘图的大小和透明度ggMarginal(p, type = "density", size = 3, alpha = 0.6)


常用参数:
type:可选 "histogram"(直方图)、"density"(密度图)、"boxplot"(箱线图)
margins:可选 "both"(双侧)、"x"(仅X轴)、"y"(仅Y轴)
size:边缘图相对于主图的尺寸比例
fill / color:自定义边缘图的颜色
注意事项:
边缘图是静态生成的,不能与交互式图表(如 ggiraph)同时使用
ggMarginal() 会返回一个新的ggplot对象,可以直接保存或继续修改
官网:https://github.com/daattali/ggExtra
一句话功能:专门绘制相关性矩阵的热图,自带显著性星号标记、聚类重排、三角布局等功能。
适合画什么:
环境因子相关矩阵
基因表达相关性分析
变量间的关联强度可视化
安装与基本用法:
install.packages("ggcorrplot")library(ggcorrplot)# 计算相关系数矩阵corr <- cor(mtcars[, 1:10], use = "complete.obs")# 绘制相关性热图(默认上三角布局,带聚类)ggcorrplot(corr,hc.order = TRUE, # 层次聚类重排行/列type = "lower", # 显示下三角(上三角会冗余)lab = TRUE) # 显示相关系数数值# 只显示显著的相关性(p < 0.05)ggcorrplot(corr, p.mat = cor_pmat(mtcars[, 1:10]), sig.level = 0.05)


核心功能:
自动进行层次聚类重排,让相关性高的变量聚集在一起
支持三角布局(上三角或下三角),避免信息冗余
支持显著性标记,不显著的相关性可以显示为空白或添加叉号
注意事项:
数据中有缺失值时,cor() 需要设置 use = "pairwise.complete.obs"
p.mat 参数需要提供显著性矩阵,可以使用 cor_pmat() 自动计算
官网:https://github.com/kassambara/ggcorrplot
一句话功能:在箱线图、柱状图等图表中,手动添加组间比较的显著性标记(带横线和星号),弥补 stat_compare_means 的不足。
适合画什么:
需要标注特定组之间显著性的箱线图
需要自定义比较组合的统计图表
安装与基本用法:
install.packages("ggsignif")library(ggsignif)# 模拟数据:三组箱线图set.seed(123)df_signif <- data.frame(group = rep(c("A", "B", "C"), each = 20),value = c(rnorm(20, 10, 2), rnorm(20, 12, 2), rnorm(20, 15, 2)))# 在指定的两组之间画显著性标记ggplot(df_signif, aes(x = group, y = value)) +geom_boxplot(aes(fill=group)) +geom_signif(comparisons = list(c("A", "B"), c("B", "C")),map_signif_level = TRUE, step_increase = 0.1)

常用参数:
comparisons:列表格式,指定要比较的组对
map_signif_level:是否用星号(*、**、***)替代数字p值
y_position:手动指定标记的垂直位置
step_increase:多个比较时,标记之间的垂直间距
注意事项:
geom_signif 会自己计算p值,如果需要使用已有的p值,可以用 annotations 参数手动标注
多个标记叠加时,step_increase 可以自动调整位置避免重叠
官网:https://github.com/const-ae/ggsignif
除了上述拓展包之外,ggplot2拓展生态中还有大量优秀包。以下是官方画廊中收录的其他部分包:
ggtree | |
ggalluvial | |
ggwordcloud | |
ggpattern | |
ggpointdensity | |
ggnetwork | |
ggradar | |
ggbeeswarm | |
gggenes | |
ggrastr | |
ggnewscale | |
ggfittext | |
gg3D | |
ggQC | |
gganatogram | |
ggmuller | |
ggdark | |
ggshadow |
📖 完整列表请访问:ggplot2 Extensions Gallery
使用建议
按需加载:20个包不用全装,装多了反而会拖慢R启动速度。每次只加载当前需要的包,用完可以 detach() 卸载。
冲突处理:多个包可能包含同名函数(如 geom_density_ridges 只在 ggridges 里有,不会冲突;但 %>% 管道操作符在 dplyr 和 magrittr 里都有,需要小心)。建议用 package::function() 显式调用。
版本兼容:ggplot2 版本更新频繁,使用 install.packages("ggplot2") 确保版本≥3.0.0,大多数拓展包都要求这个版本以上。
投稿建议:期刊投稿时,建议使用 theme_bw() 或 theme_classic() 等简洁主题,配合 ggsci 的配色,既专业又避免过度装饰引发审稿人反感。
总结
ggplot2之所以能成为R语言绘图的“事实标准”,很大程度上得益于它庞大的拓展包生态。无论你是需要处理重叠标签(ggrepel)、添加统计注释(ggpubr)、复杂分面(ggh4x),还是快速套用顶刊主题(ggthemes),总有一个拓展包能帮你事半功倍。
记住:拓展包之间可以叠加使用!比如你可以用 ggsci 配色,用 patchwork 拼图,再用 ggrepel 标注,画出既专业又美观的图表。
希望这份详细的拓展包指南能帮你打开ggplot2的新大门,让科研绘图不再是一件苦差事。如果你还有其他好用的拓展包推荐,欢迎在评论区分享!
PS: 以上内容是小编个人学习代码笔记分享,仅供参考学习,欢迎大家一起交流学习。







「R绘图模板」存在-缺失热图:一张图看懂数据的“有”和“无”!!!

「R绘图模板」RDA&dbRDA&CCA可视化!!!

「R绘图模板」Communications Earth & Environment | 组合图系列—曼哈顿图+Venn图展示富集OTU情况!!!

「R绘图模板」组间差异基因排序气泡图!!!

「R绘图模板」Nature | 组合图-分组折线+曲线下增量区域(iAUC)可视化!!!

「R绘图模板」Science Advances | 组合图-并列柱状图+饼图+折线图!!!

「R绘图模板」J. Agric. Food Chem. | 分面组合图-字母标记显著性柱状图+传统显著性标记箱线图!!!

「R绘图模板」主成分分析(PCA)+各类型边缘图!!!

「R绘图模板」Field Crops Res. | 组合图系列—三元图+条形图展示微生物丰度信息!!!

「R绘图模板」Nat. Commun | 复杂tree注释—分支颜色+多层离散热图+分组条形图!!!

「R绘图模板」多色系热图+分组气泡图!!!

「R绘图模板」组合图—多层注释tree+相关性热图!!!

「R绘图模板」分组散点+拟合曲线+组间显著性字母标记+相关统计数据计算!!!

「R绘图模板」WGCNA聚类图美化!!!

「R绘图模板」配对连线图+均值点及连线+显著性+嵌套分组!!!

































