图做得好不好看,配色占了一半。科研图还有额外要求:色盲读者可识别,灰度打印仍可辨别,符合期刊分辨率。下面是我写论文时积累的 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 对色盲读者不友好"。
文章评论