相信各位在肝图表写论文时,一定都会思考:这张图表用啥颜色?论文整体配色搭配怎么把控才好看?
毕竟高分期刊大牛文章的共通点,除了论文精彩,整体配色也十分具有吸引力。
许多在线配色/提取颜色的工具效果不错,通过下载大牛文章使用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).