首页 > 科研绘图 > 如何一秒获取Science、Nature等高分期刊配色?
2022
06-30

如何一秒获取Science、Nature等高分期刊配色?

相信各位在肝图表写论文时,一定都会思考:这张图表用啥颜色?论文整体配色搭配怎么把控才好看?

毕竟高分期刊大牛文章的共通点,除了论文精彩,整体配色也十分具有吸引力。

许多在线配色/提取颜色的工具效果不错,通过下载大牛文章使用PS、AI等直接“偷色”也不是难事。如今即便自己缺少美学灵感,但仍可以做到轻松获取出彩的配色方案。有兴趣可参考往期推文: 《作图颜色调得好,高分文章跑不了!》 、 《如何“偷走”大牛文章漂亮的配色?》

但上述方法可能不适用所有情景(特别是R绘图时)。只需要少量颜色的情况还好,直接通过十六进制颜色码自定义配色即可,做到好看十分简单。

但当绘制一些如堆叠图、桑基图等的多分组图表时,当你需要自定义十几种甚至更多颜色时(如下图),在找配色上就会花费非常多的时间,根据数据的不同,有些需要渐变配色(容易一点),有些则需要离散配色(这个最难),不太适合懒人。

( ISME ,2021)

因此,今天给大家介绍四个能轻松获取高分科学期刊同款配色方案的R包,并讲述如何基于这四个配色包,生成任意所需数量的超好看配色。当然,也能提取出配色方案,“反向”运用于Origin、AI、Excel等其它软件图形的绘制。

# 1. ggsci #

此包是基于ggplot2的颜色主题包,内置的配色方案都为各类科学期刊、科幻电影常用配色。由于篇幅受限,这里仅展示部分常用科学期刊配色,剩余大家自行查看帮助文档。

#相关包的安装和载入

install.packages('ggsci')

library(ggsci)

library(ggplot2)

#查看此包帮助文档(共提供18种配色方案,点击名称即可跳转到对应配色说明及案例)

vignette( "ggsci")

#提取配色的通用函数(palname替换为配色方案名称即可,详见帮助文档)

#scale_color_palname

#scale_fill_palname

#使用R内置数据集创建箱线图作为本次范例:

data(singer,package= "lattice")

p<-ggplot(singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part,alpha=0.8))+geom_boxplot

p<-p+theme_bw+coord_fixed(ratio=0.25)

#使用Nature配色(NPG)

p2<-p+scale_color_npg+scale_fill_npg

p2

#使用Science配色(AAAS)

p3<-p+scale_color_aaas+scale_fill_aaas

p3

#使用柳叶刀配色(Lancet)

p5<-p+scale_color_lancet+scale_fill_lancet

p5

#使用Journal of Clinical Oncology配色(JCO)

p6<-p+scale_color_jco+scale_fill_jco

p6

那么如何将心仪的颜色提取出来呢?不同的配色方案本质就是不同十六进制颜色码向量的集合。但ggsci包有些特殊,颜色向量集的名称并不和帮助文档中所给的对应配色方案名称对应,因此需要多一步自行查找。

#查看选中配色方案的帮助文档 (以Nature的配色NPG为例)

library( "scales")

? scale_color_npg

查看NPG的帮助文档可发现,此配色方案包含共10种颜色,颜色向量集名称为“nrc”,可以调整透明度。

#可选择提取≤10种颜色,但可通过调节透明度产出不同明度的配色方案

mycolor<-pal_npg( "nrc", alpha = 0.5)(8) #提取8种颜色,透明度80%

mycolor

show_col(mycolor)

ggsci包中其余配色方案也可通过此方法来获取十六进制颜色码,大家可根据需要直接复制颜色码或者保存配色图片。

# 2. RColorBrewer #

这个包的使用频率也非常高,上一周推文 《如何绘制Science文章的“花式”河流图?》 中就使用它进行配色。

#RColorBrewer包的安装和载入

install.packages('RColorBrewer')

library(RColorBrewer)

#查看帮助文档

? RColorBrewer

#查看全部配色方案

display.brewer. all

#作者将上述配色方案分为了三类(从上至下):连续型(sequential)、离散型(Qualitative)、极端型(Diverging),可适用于不同类型的分类变量(非常方便!),以下代码可分别进行查看

display.brewer. all(type= "seq")

display.brewer. all(type= "qual")

display.brewer. all(type= "div")

#使用Spectral配色方案

mycolor2<-brewer.pal(11, "Spectral")#可选择的颜色数量区间在此配色最大数和绘图所需数之间

p7<-p+scale_fill_manual(values=rev(mycolor2))+

scale_color_manual(values=rev(mycolor2))

p7

#使用YlOrRd配色方案

mycolor3<-brewer.pal(9, "YlOrRd")

p8<-p+scale_fill_manual(values=rev(mycolor3))+

scale_color_manual(values=rev(mycolor3))

p8

RColorBrewer包可直接提取配色,颜色集合的名称和配色方案名称相同。

#提取所需配色的十六进制颜色

brewer.pal(9, "YlOrRd")

show_col(mycolor3)

两个包的基础用法就介绍到这。此外,文首提到的常见情况——分类变量非常多的情况怎么办?上述R包里每种方案所包含的颜色数量似乎也就10来种,似乎不够用?

#方法一:

使用colorRampPalette扩展上述R包颜色

#这个函数的基本用法:基于指定的颜色向量,生成指定数量的渐变颜色

col3<-colorRampPalette(c('blue','white','red'))(30)

show_col(col3)

#使用colorRampPalette扩展R包配色方案中的颜色

col4<-colorRampPalette(brewer.pal(8,'Set2'))(56)#将RColorBrewer包中的Set2方案8个颜色扩展为56个

col5<-colorRampPalette((pal_npg( "nrc")(9)))(56)#将ggsci包中的NPG方案9个颜色扩展为56个

show_col(col4)

show_col(col5)

当然,你也可以通过从配色包中提取出心仪的十六进制颜色码,去任意指定自己所需颜色,这里不再展示。

#方法二:

使用paletteer包

朋友们,如果上述方法还不能满足你的要求,那就用用看paletteer!这个包中共收录了52个R包中的2,100种配色方案,都可直接调用,出现“配色荒”算我输!

#paletteer包的安装、调用、查看帮助文档

install.packages( "paletteer")

library(paletteer)

? paletteer

Paletteer包中针对不同数据类型(连续型、离散型),存在两种调用函数,详见下文:

1.连续型配色方案:和colorRampPalette函数类似,可以基于选定的配色主题扩展出任意所需数量颜色。

#生成连续型配色方案(基于选定的配色主题拓展出所需任意数量的颜色):

c_palettes<- palettes_c_names#查看所有配色

我们可以看到,连续型配色方案中共有330种方案,每个方案都可以生成指定数量颜色~

#引号处配色名称可直接Tab键浏览选取,也可以直接输入,格式为:R包名称::配色方案名称

paletteer_c( "gameofthrones::targaryen", n = 40)

paletteer_c( "gameofthrones::arya", n = 15)

paletteer_c( "pals::ocean.matter", n = 25)

我们任意盲挑几种搭配,生成不同数量的颜色,如下图,十六进制颜色码都叠加在对应颜色上,我们在挑配色时就太方便啦(当然也可以生成色卡直接导出,见前文,这里不赘述)!

2.离散型配色方案:虽然每种配色方案依然有最大颜色数限制,但架不住收纳的配色主题多啊(共有2,037种配色方案)!从几种,到十几种、二三十种、上百种颜色的配色方案都完美囊括。

#生成离散型配色方案:

d_palettes<- palettes_d_names#查看所有配色 ,共计2037种配色方案

paletteer_d( "ggthemes::Classic_20",n=20) #随机选一个查看

#将随机选取的Classic_20配色方案运用于箱线图示例:

mycol<-paletteer_d( "ggthemes::Classic_20",n=20)

p9<-p+scale_fill_manual(values=rev(mycol))+

scale_color_manual(values=rev(mycol))

p9

真的随便乱挑出来的配色都好好看!

#方法三:

使用colorpicker包

paletteer还不满足,看来是时候展现真正的技术,自己手动丰衣足食了!

R语言的难点之一就是啥都要敲代码,搞得上个色都那么艰难。但是,colorpicker为我们提供了一个交互式颜色获取面板,让你能够体验“非R”的轻松愉快(简单来说,你可以不用敲代码直接点点点快速获取颜色)。

#colorpicker包的安装、调用

install.packages( "colourpicker")

library(colourpicker)

col_colourpicker<-#先设置需要赋值的颜色名,鼠标选择在Addins处选择colourpicker

然后会出来一个交互式面板(像是在用别的软件了呢),如下:

在Any colour面板,你可以点击“+”任意添加所需颜色数量,在“Select any colour”处任意挑选颜色,或者直接输入十六进制颜色码,如下图。

在Find R colour面板,你可以任意选择一个颜色,并生成一组40个颜色以内的相近色搭配色板,根据需要点击颜色将其添加到“Selected colours”处。

最后,在All R colour面板提供了好看的配色库可自行挑选添加,在完成颜色选择后,我们点击右上角的Done即可输出十六进制颜色码或者颜色名称。

col_map<-c( "#E07979", "#801212", "#EDB4B4", "#4169E1", "#6CA6CD", "#48D1CC", "#FFC0CB", "#96CDCD")

对于想自行控制配色的人来说,简直太方便啦!

上述方法都能够快速生成任意所需数量的科学期刊配色方案!根据自己的需求选择适合自己的方法吧!今天的分享就到这里~

PS

如果各位有更好用的包或者方法欢迎评论区分享!

参考文献

Bowerman, K.L., Knowles, S.C.L., Bradley, J.E. et al. Effects of laboratory domestication on the rodent gut microbiome. ISME COMMUN. 1, 49 (2021).



最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情