ggsci 是一个专门为 ggplot2 设计的扩展包,它的核心功能是提供一系列高质量的、受知名学术期刊(如 Nature, Science, The Lancet)和流行软件(如 JASP, RColorBrewer)启发的调色板。

ggsci 让你能够轻松地为你的 ggplot2 图形应用专业、美观且具有辨识度的配色方案。
为什么使用 ggsci?
在数据可视化中,配色至关重要。ggsci 的优势在于:
- 专业美观:其调色板经过精心设计,常用于顶级科学期刊的图表,能显著提升图形的专业感和可读性。
- 易于使用:与
ggplot2无缝集成,只需替换scale_fill_*或scale_color_*函数即可。 - 种类丰富:提供了多种主题风格的调色板,包括
npg(Nature Publishing Group),aaas(Science),nejm(New England Journal of Medicine),jco(Journal of Clinical Oncology),d3(D3.js),lancet等。 - 解决色盲友好问题:很多
ggsci的调色板是色盲友好的,这对于确保图表对所有人(包括色盲人士)都是可读的非常重要。
安装与加载
你需要安装并加载 ggsci 包。
# 安装
install.packages("ggsci")
# 加载
library(ggsci)
library(ggplot2) # ggsci 依赖于 ggplot2
核心功能:调色板函数
ggsci 的核心是一系列 scale_*_pal_* 函数,用于创建 ggplot2 可以识别的调色度尺。

scale_color_pal_...():用于设置颜色(如点、线、文本的颜色)。scale_fill_pal_...():用于设置填充色(如条形、箱线图的内部填充)。scale_alpha_pal_...():用于设置透明度。
这些函数通常与 ggplot2 的 scale_*_manual() 或 scale_*_gradientn() 结合使用。
常用调色板示例
下面我们通过几个常见的场景来展示 ggsci 的用法。
示例 1:离散分类变量(如不同组别)
假设我们想用 Nature 期刊风格的调色板来绘制 mpg 数据集中不同 class 的车辆数量。
# 使用 ggplot2 的 geom_bar 绘制条形图 p <- ggplot(mpg, aes(x = class, fill = class)) + geom_bar() + labs(title = "Nature (npg) Palette", x = "Class", y = "Count") + theme_minimal() + theme(legend.position = "none") # 隐藏图例,让图形更简洁 # 应用 ggsci 的 npg 调色板 p + scale_fill_npg()
其他常见离散调色板:

# Science (aaas) 风格 ggplot(mpg, aes(x = class, fill = class)) + geom_bar() + scale_fill_aaas() + labs(title = "Science (aaas) Palette") + theme_minimal() + theme(legend.position = "none") # JCO (Journal of Clinical Oncology) 风格 ggplot(mpg, aes(x = class, fill = class)) + geom_bar() + scale_fill_jco() + labs(title = "JCO Palette") + theme_minimal() + theme(legend.position = "none") # D3 (Category10) 风格 ggplot(mpg, aes(x = class, fill = class)) + geom_bar() + scale_fill_d3() + labs(title = "D3 Category10 Palette") + theme_minimal() + theme(legend.position = "none")
示例 2:连续变量(如渐变色)
ggsci 也提供了用于连续变量的调色板,这些调色板通常是从一种颜色平滑过渡到另一种颜色。
假设我们想用 Lancet 期刊风格的渐变色来展示 mpg 数据集中的 hwy 公里数。
ggplot(mpg, aes(x = displ, y = hwy, color = hwy)) + geom_point(size = 3) + labs(title = "Lancet Palette for Continuous Data", x = "Displacement", y = "Highway MPG") + theme_minimal() + # 使用 scale_color_lancet() 创建一个从浅蓝到深蓝的渐变 scale_color_lancet()
其他常见连续调色板:
# GSEA GenePattern 调色板,常用于展示基因表达数据 ggplot(mpg, aes(x = displ, y = hwy, color = hwy)) + geom_point(size = 3) + scale_color_gsea() + labs(title = "GSEA GenePattern Palette") + theme_minimal()
高级用法:自定义调色板
你可能不想使用整个调色板,而是只想选择其中的几个颜色。ggsci 提供了 pal_...() 函数来提取调色板的颜色向量,然后你可以手动指定。
假设我们只需要 npg 调色板中的前 4 种颜色。
# 1. 提取 npg 调色板中的前4个颜色
npg_colors <- pal_npg("npg")(4)
print(npg_colors)
# [1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3"
# 2. 手动将这些颜色映射到你的数据
ggplot(mpg, aes(x = class, fill = class)) +
geom_bar() +
# 使用 scale_fill_manual() 并传入我们自定义的颜色向量
scale_fill_manual(values = npg_colors) +
labs(title = "Custom npg Palette (First 4 Colors)") +
theme_minimal() +
theme(legend.position = "none")
这种方法非常灵活,你可以根据需要组合不同调色板中的颜色。
所有可用调色板列表
ggsci 提供了大量的调色板,以下是一些主要的:
| 调色板系列 | 离散函数 | 连续函数 | 描述 |
|---|---|---|---|
| Nature | scale_color_npg(), scale_fill_npg() |
- | Nature Publishing Group 风格 |
| Science | scale_color_aaas(), scale_fill_aaas() |
- | American Association for the Advancement of Science (Science期刊) 风格 |
| NEJM | scale_color_nejm(), scale_fill_nejm() |
- | New England Journal of Medicine 风格 |
| JCO | scale_color_jco(), scale_fill_jco() |
- | Journal of Clinical Oncology 风格 |
| Lancet | scale_color_lancet(), scale_fill_lancet() |
scale_color_lancet() |
The Lancet 风格 |
| JAMA | scale_color_jama(), scale_fill_jama() |
- | Journal of the American Medical Association 风格 |
| UCSCGB | scale_color_ucscgb(), scale_fill_ucscgb() |
- | UCSC Genome Browser 风格 |
| D3 | scale_color_d3(), scale_fill_d3() |
- | D3.js Category10 调色板 |
| IGV | scale_color_igv(), scale_fill_igv() |
- | Integrative Genomics Viewer 风格 |
| AAV | scale_color_aav(), scale_fill_aav() |
- | AAV (Adeno-Associated Virus) 调色板 |
| Base | scale_color_base(), scale_fill_base() |
- | R base graphics 的调色板 |
| GSEA | scale_color_gsea(), scale_fill_gsea() |
scale_color_gsea() |
Gene Set Enrichment Analysis 常用调色板 |
| Nord | scale_color_nord(), scale_fill_nord() |
- | Nord 配色方案,适合深色背景 |
| Cyclops | scale_color_cyclops(), scale_fill_cyclops() |
- | Cyclops 调色板,色盲友好 |
ggsci 是 R 数据可视化工具箱中一个不可或缺的包,它通过提供一套经过验证的、专业的调色板,极大地简化了为 ggplot2 图形选择配色的过程,让你的图表看起来更加美观、专业和易于理解。
使用流程:
- 安装并加载
ggsci和ggplot2。 - 根据你的数据类型(离散或连续)和期望的风格(如 Nature, JCO 等),选择合适的
scale_*_pal_*函数。 - 将该函数直接添加到你的
ggplot对象中即可。 - 如果需要自定义,使用
_pal_...()函数提取颜色向量,再用scale_*_manual()进行精细控制。
