背景
虽然有那么多调色板:
https://www.nceas.ucsb.edu/~frazier/RSpatialGuides/colorPaletteCheatsheet.pdf
还有那么多配色方案:
https://cran.r-project.org/web/packages/ggsci/vignettes/ggsci.html
当我为paper结果图选颜色时,还是会对自己的审美不自信。
那就模仿你(或者你老板)心仪的文章的配色方案吧!
应用场景
本套代码要做的就是从你心仪的文章里提取它的配色方案。
如果你需要大量的颜色,那就选一篇颜色丰富的文章。
颜色提取
用到 rPlotter
包,先安装它
install.packages(c("ggplot2", "stringr", "reshape2", "dichromat"))
source("http://bioconductor.org/biocLite.R")
biocLite("EBImage")
library(devtools)
install_github("ramnathv/rblocks")
install_github("woobe/rPlotter")
此处以PMID: 28726821这篇文章为例,提取正文Figure的颜色
同一篇文章里的图通常会使用同一套配色方案,这样全文看起来才协调。
因此,通常挑选其中最具代表性的1个Figure提取颜色就够了,例文的Figure 2最为典型。
提取Figure 2的颜色
library(rPlotter)
#其中`num_col =`参数默认值是5,此处设置为30,提取30种颜色
# mycol<-extract_colours("https://media.nature.com/lw926/nature-assets/nature/journal/v547/n7663/images/nature22973-f2.jpg",num_col = 30)
# 链接访问404了,直接读取本地文件如下
mycol<-extract_colours("nature22973-f2.jpg",num_col = 30)
mycol
#展示颜色
library("scales")
show_col(mycol)
#保存颜色和代码到PDF文件,制作配色卡
pdf("Fig2.pdf")
show_col(mycol)
dev.off()
#保存颜色代码到文本文件
write.table(mycol,"Fig2.txt",row.names = F,col.names = F)
show_col(mycol)如下:

提取 Figure 2 - 6
的颜色
如果你不满足于一个图的颜色,还可以一步提取全文所有图的颜色。
Paper里的Figure地址都是有规律可循的,拿到一个Figure的地址,就能推测出其他Figure的地址。
找到地址的规律,就可以用 for
循环提取所有Figure的颜色。
#library(rPlotter)
allcol<-list()
for (i in 1:6){
#fig<-paste0("https://media.nature.com/lw926/nature-assets/nature/journal/v547/n7663/images/nature22973-f",i,".jpg")
#如果网速慢,或者没有在线打开的权限,就提前把图片保存在当前目录
#从当前目录读取图片文件
fig<-paste0("nature22973-f",i,".jpg")
allcol<-append(allcol,extract_colours(fig, num_col = 30))
}
#去除重复出现的颜色
allcol<-base::unique(unlist(allcol))
#颜色排序
allcol<-allcol[order(allcol)]
#展示颜色
library("scales")
show_col(allcol)

颜色多了,用一维展示看起来乱,用三维展示
#转换为RGB
allcol_rgb<-data.frame(t(col2rgb(allcol)))
allcol_rgb$col<-allcol
#install.packages("rgl")
library(rgl)
plot3d(allcol_rgb$red,allcol_rgb$green,allcol_rgb$blue,
xlab = "red",ylab = "green",zlab = "blue",
col = allcol_rgb$col,
size = 10,
lit = F)
#保存颜色
write.table(allcol,"allcol.txt",row.names = F,col.names = F)

增减颜色
- 增加过渡色。为了产生同一色系,让画图效果更协调,有时会在几种颜色中间添加过渡色。
#例如,想用mycol的前4个颜色:
show_col(mycol[1:4])
#需要扩展成8种颜色
mycol_plus<-colorRampPalette(mycol[1:4],alpha=TRUE)(8)
show_col(mycol_plus)
#保存颜色
write.table(mycol_plus,"Fig2_plus.txt",row.names = F,col.names = F)
mycol_plus如下:

- 缩减颜色。如果只想要其中一部分颜色,可以手动编辑"allcol.txt"文件,还可以用上面的方法抽取部分颜色。
#例如,allcol颜色太多,只抽取50个颜色
allcol_minus<-colorRampPalette(allcol,alpha=TRUE)(50)
show_col(allcol_minus)
#保存颜色
write.table(allcol_minus,"allcol_minus.txt",row.names = F,col.names = F)
allcol_minus如下:

颜色的用法
上面获得的 mycol
就可以用到其他的画图代码中
用法一
替换代码中的自定义颜色,例如画图代码中找到 mycol<-
那一行,或者是 colpal<-
,或者是 bgcol<-
。用下面这三行替换它:
mycol<-read.table("Fig2.txt")#此处使用Figure 2的颜色
mycol<-as.character(mycol$V1)
#mycol
用法二
定义单个颜色,例如在画图代码中找到类似下面这样的语句:
palette = c("red","blue")
colours = c("#2381B3","#F0E366")
用你喜欢的颜色代码替换括号里的颜色代码。
用法三
有几套代码的颜色写在输入文件中,修改输入文件中的颜色,例如染色体图的文件。
打开输入文件,找到颜色列,用你喜欢的颜色代码替换原来的颜色,注意去掉 #
符号