有没有让人恶心的配色(你的图为什么丑)(1)

作者:麦子

文章中有许多图是由数据生成的,有的杂志有很严格的整体风格,也有的杂志则给作者很多操作的自由。不过对于一些作者来说,自由却是痛苦的根源——不会配色,配了嫌丑,丑了也不知咋改,改了还是丑。

如果发些简单的文章,几个柱状图、折线图啥的也还不愁,大不了可以通过填充图案来区分各组。可是要展示更多的分析结果时,就不得不考虑颜色了,它比黑白灰 图形区分更为高效,能传递更多信息。尤其加上了生信分析时,一篇文章跟个画册似的。

不过,既然是数据图,除了要照顾视觉外,最重要的是有效传递信息!颜色还会影响人对数据的理解,用好了它就是神助攻,用不好就是猪队友,所以也就有不少讲究。一些数据科学家还会开发R语言的配色程序包,比如RColorBrewer,ggsci等。不过对于其他软件的用户,配色基本靠手选时,一些配色原则就应该了解。

常用配色原则

1. 强调差异时选用对比色

有没有让人恶心的配色(你的图为什么丑)(2)

这个色环你一定认识,不管它是什么形状,所有的颜色都是一个排列顺序。选用对侧或距离较远的颜色,能很容易地区分不同组的数据。

2. 相近的颜色表达相似性

当有各组之下还有亚组时,就可考虑相近的颜色。这可以是色环上左右邻近,但更好的是用同一颜色(色相)不同明度:

有没有让人恶心的配色(你的图为什么丑)(3)

这两个原则运用最为广泛。比如下图的各亚组之间运用了同色相的不同明度,没毛病。而各组之间,图A的橙、绿、紫,在上边的色环中是个等边三角形分布,视觉上的对比更为强烈。而图B的绿、蓝、紫则分布在从绿到紫的1/3弧上,则让人容易想到它们之间是有某种联系。

有没有让人恶心的配色(你的图为什么丑)(4)

3. 鲜艳的颜色要慎用

鲜艳的颜色就是纯度高,即饱和度高,如下图的最左一列。不仅显得gay里gay气(gay这词本来就有艳的意思,诚不我欺),而且,可能印刷不出来!因为染料毕竟会有杂质,印不出来就有可能造成信息扭曲。

有没有让人恶心的配色(你的图为什么丑)(5)

许多作图软件都有个明艳惹眼的彩红配色(一整盘的高饱和色),有的还是默认选项,许多科研人就这么不加判断地拿来就用。几年来一直有学者呼吁停止使用彩红配色,也一直……唉。

如果真的要用,可以降低饱和度,或者调高透明度,使它看起来不那么浓艳。

而且,避免广泛运用艳色的好处是,当你有某个很想要强调的数据时,其他都是灰暗的,就它是艳的,多好。

有没有让人恶心的配色(你的图为什么丑)(6)

4. 照顾色弱色盲人群

有些杂志会特别强调这点。色弱色盲人群是占少数,但科学不应排挤他们,别忘了第一个色盲病例就是化学家报道的。有的国家会对他们有专业限制,但也有些地方会采取一些便利措施,使他们得以追求自己热爱的事业。

有没有让人恶心的配色(你的图为什么丑)(7)

这个调色析即展示了常用的15种颜色中,在常人和三类色盲患者眼中的样子,尤其打圆点和三角标记的颜色,黄蓝色盲根本无法区分。我们设计图表时应尽量避免。

如果还觉得不够用,可以安装一个Color Oracle(http://colororacle.org/),可以把你的电脑屏幕实时变成色盲眼中的样子,帮助选色判断。

常用配色包

前文提到的两个R语言包都是广受欢迎的科学数据配色包。RColorBrewer比较老牌,相对更成熟,前边提到的配色原则它都有所体现,对非R语言用户也比较友好。官方介绍:http://colorbrewer2.org/

而ggsci则是提供了几大杂志的常用配色,包括NPG(自然出版集团)、AAAS(美国科学促进会)、Lancet、JAMA、NEJM等,还有UCSCGB、IGV等生信工具的配色,此外还有一些好玩的科幻文艺作品的主题色。还是两位华人学者开发的哦~官方介绍:https://ggsci.net/

不喜欢用R语言的盆友,可以在RColorBrewer的官网上浏览他们的配色方案,挑一个合适的,提取颜色编码(十六进制或RGB),然后在你喜欢的软件上用。

有没有让人恶心的配色(你的图为什么丑)(8)

图中左边Colorblind safe下边的print friendly则是考虑到屏幕到纸质印刷的区别,选中它之后,一些鲜亮或变化细微的方案就选不上了。Photocopy safe则表示彩色转黑白后是否还能分辨出各颜色的差别,这个选项似乎考虑较少。

ggsci则没有这么便利,要提取颜色码,也还得在R中提取。它也还在持续更新,目前最新版是今年6月发布的2.7版。

先安装最新版本:

install.packages("ggsci", repos = "https://cran.rstudio.com ")

# 如果不加上后面repos那句,可能会不是最新版。

然后载入两个包

library(ggsci)

library(scales)

再输出颜色值:

pal_aaas('default',0.8)(10)

# 其中pal_aaas是指AAAS杂志的配色,default是指子方案的名称。本来作者可能想准备好几个配色方案的,现在么,还只有一个默认方案。0.8是指不透明度,为数值越小颜色越淡。10是指配色方案中的色块数。运行就会得到:

有没有让人恶心的配色(你的图为什么丑)(9)

这就可以贴到你的常用软件中去用。或者加上show_col查看具体颜色:

show_col(pal_aaas('default',0.8)(10))

有没有让人恶心的配色(你的图为什么丑)(10)

其他杂志的主题色也同理,比如lancet:

show_col(pal_lancet('lanonc',0.8)(9))

# ‘lanonc’是指lancet oncology

有没有让人恶心的配色(你的图为什么丑)(11)

要在R语言ggplot2作图中使用的话也很简单。先常规画个图:

library(ggplot2)

data(diamonds)

# 载入diamonds示例数据

p1 = ggplot(subset(diamonds, carat >= 2.2),

aes(x = table, y = price, colour = cut))

geom_point(alpha = 0.7)

geom_smooth(method = "loess", alpha = 0.05, size = 1, span = 1)

# 画个图,存为p1。

Print(p1)

打印出来看个效果,这时的颜色比较艳丽:

有没有让人恶心的配色(你的图为什么丑)(12)

要给p1使用NPG的配色方案,就直接加上去,存为p1_npg:

p1_npg = p1 scale_color_npg

再输出:

print(p1_npg)

有没有让人恶心的配色(你的图为什么丑)(13)

这个看起来就稳重一些。

用RColorBrewer包也差不多。还是刚才的p1,选择RdYlBu方案(各方案名称都可在帮助文档中查看)

Cols <- brewer.pal(5, "RdYlBu")

# 因为有5个数据组,所以选5种颜色,存为Cols

p1_RdYlBu <- p1 scale_color_manual(values = Cols)

# 还是p1加上调色板,下面输出

print(p1_RdYlBu)

有没有让人恶心的配色(你的图为什么丑)(14)

呃,貌似还是NPG好看一些。

参考资料:

1. http://teachers.sduhsd.net/smorawa/color.htm

2. Choosing Colors for Data Visualization

3. Picking a colour scale for scientific graphics

4. https://tex.stackexchange.com/questions/42069/what-colors-are-good-to-use-for-graphs-and-figures-in-scientific-publications-th

5. Graphics: Scrap rainbow colour scales

有没有让人恶心的配色(你的图为什么丑)(15)

欢迎投稿

tougao@helixlife.com.cn

合作helixlife6

,