专栏名称: 解螺旋
解螺旋——医生科研最好的帮手。无论你是科研零基础,抑或初窥门径,你都可以在解螺旋获得极大的提升,从而面对基金、论文、实验游刃有余。解螺旋课堂是所有热爱科研技能学习的医生聚集地,解螺旋会员是医生科研全方位的贴心助手,加入我们,体验改变。
目录
相关文章推荐
蒲公英Ouryao  ·  4位药企大佬上榜!首届100位最具影响力商界 ... ·  2 天前  
丁香园  ·  12 岁男孩服用阿奇霉素后死亡!这 4 ... ·  4 天前  
医学界  ·  最新中国医院排行榜来了! ·  6 天前  
51好读  ›  专栏  ›  解螺旋

你的图为什么丑?因为配色是个大坑

解螺旋  · 公众号  · 医学  · 2017-09-07 17:59

正文

经验 | 文献 | 实验 |  | SCI写作 | 国自然

作者:麦子

转载请注明:解螺旋·临床医生科研成长平台



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


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


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


常用配色原则



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



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


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


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



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



3. 鲜艳的颜色要慎用


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



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


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


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



4. 照顾色弱色盲人群


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



这个调色析即展示了常用的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),然后在你喜欢的软件上用。



图中左边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是指配色方案中的色块数。运行就会得到:



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


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




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


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

# ‘lanonc’是指lancet oncology



要在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)

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



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

p1_npg = p1 + scale_color_npg()

再输出:

print(p1_npg)



这个看起来就稳重一些。


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


Cols

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

p1_RdYlBu

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

print(p1_RdYlBu)



呃,貌似还是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


欢迎投稿
[email protected]
合作微信:helixlife6