ggplot2 科研配色方案:5 套可直接用的代码

图做得好不好看,配色占了一半。科研图还有额外要求:色盲读者可识别,灰度打印仍可辨别,符合期刊分辨率。下面是我写论文时积累的 5 套实用方案,每套附完整 R 代码。

为什么不用 ggplot2 默认配色

ggplot2 默认的彩虹色轮有两个硬伤:红绿色盲无法区分(全球约 8% 的男性),且打印成灰度时各颜色明度差异极小,几乎无法辨别。这两个问题在审稿人里出现的频率远超想象。

方案一:viridis(色盲安全 + 渐变首选)

library(viridis)
library(ggplot2)

# 连续变量(如热图)
ggplot(df, aes(x, y, fill=value)) +
  geom_tile() +
  scale_fill_viridis_c()

# 离散变量
ggplot(df, aes(x, y, color=group)) +
  geom_point() +
  scale_color_viridis_d(option="D") # 也可用 "magma"、"plasma"

viridis 是目前 Nature、Science 子刊最常见的配色,色盲安全,灰度打印层次清晰。

方案二:ColorBrewer(分类变量首选)

scale_color_brewer(palette = "Set2")   # 8 色,柔和
scale_color_brewer(palette = "Dark2")  # 8 色,深色版
scale_fill_brewer(palette  = "Blues")  # 单色渐变

在 colorbrewer2.org 可以预览所有面板效果并勾选”Colorblind safe”过滤。

方案三:ggsci 期刊配色

library(ggsci)
scale_color_nejm()     # NEJM 风格:蓝红黑为主
scale_color_lancet()   # Lancet 风格
scale_color_jco()      # JCO 风格(肿瘤学期刊)
scale_color_npg()      # Nature 系列

适合投生命科学期刊时,用对应期刊的配色风格,审稿人看着亲切,视觉上也更统一。

方案四:手动定义(最可控)

# 选 4 个颜色(用 Adobe Color 或 coolors.co 调好)
my_colors <- c("#E64B35", "#4DBBD5", "#00A087", "#3C5488")

scale_color_manual(values = my_colors)
scale_fill_manual(values  = my_colors)

好处是所有图使用完全一致的颜色,论文视觉统一性最强。

方案五:提交前做色盲检查

install.packages("colorblindr")
library(colorblindr)

p <- ggplot(df, aes(x, y, color=group)) + geom_point()
cvd_grid(p)  # 模拟红绿色盲 + 蓝黄色盲 + 灰度 共4种视角

提交前跑一遍,确认各组在色盲视角下仍可区分。这一步可以避免审稿人在意见里专门指出"Figure X 对色盲读者不友好"。

Read this article in English →

上一篇 远程工作与数字游民:如何在不移民的情况下为海外公司工作
下一篇 Docker in Production: Multi-Stage Builds and Container Security