寫在前面的話
作為一個理科男,也許我的科研能力達(dá)不到理工男的平均水準(zhǔn)。但你要是說比審美,那我想說在座的各位都是弟弟。每當(dāng)導(dǎo)師讓我畫圖時,紅黃綠三原色都是我的第一選擇。于是我畫的圖往往就成了如下樣式:

果然沒有一點點做作,好看,顯眼,清晰,自然……
正文
不自黑了,回到正題。在科研的過程中,我想很多人應(yīng)該和我一樣或多或少會遇到畫圖的配色問題。我腦子里想的顏色是這樣的,可一旦用代碼實現(xiàn),就立刻被自己的審美深深的震撼。本文,為了解決這個問題,給出了兩種方法。
RColorBrewer配置所需顏色
RColorBrewer提供了3套配色方案:
- 連續(xù)性(Sequential),顏色漸變,由淺到深。通常在畫圖時,我們會使用淺色表示較低的值,深色表示較高的值
- 離散型(Qualitative),生成差異顯著的顏色(如前文所說的紅黃藍(lán),但要好看很多),通常用來標(biāo)注分類數(shù)據(jù)。
- 發(fā)散性(Diverging),兩端深,中間淺色,強(qiáng)調(diào)從一個深色到另一個神色的漸變(畫熱圖時經(jīng)常會使用)。還可以用這種色調(diào)畫圖以標(biāo)注圖中的離群點。
下面給出三種不同類型配色的調(diào)色盤樣式,可以使用命令 display.brewer.all() 調(diào)用 :



RColorBrewer除了給出了合適的配色方案,還有一個優(yōu)點,那就是會告訴你這種配色方案是否對色盲友好。輸入 brewer.pal.info ,會給出下面的信息:

- 第一列給出的是顏色名稱,比如第一個就是
BrBG - 第二列給出的是該顏色方案的最大數(shù)量,如
BrBG類型最多支持11種顏色 - 第三列給出的就是前面所講的三類配色方案的簡稱。
- 第四列
colorblind表示的是否對色盲友好
我們可以使用 display.brewer.pal 命令查看各種配色類型的具體情況,如display.brewer.pal(11,'BrBG') 會出現(xiàn)下面所示的圖案:
有時候我們不想使用全部顏色,只想要使用某個配色方案中的三四種顏色怎么辦呢?使用命令 brewer.pal 即可,如我們輸入brewer.pal(11,'BrBG') ,結(jié)果如下:
我們可以看到 RColorBrewer 包中的所有顏色都是以十六進(jìn)制顏色格式存儲的,每一個顏色都對應(yīng)有一個十六進(jìn)制表示。
此外, RColorBrewer 包中某一種配色的種類是有限制的,比如 seq 類型配色都只有9個顏色。不過,好在我們可以使用 colorRampPalette 函數(shù)創(chuàng)建顏色梯度。比如:
mycolor <- brewer.pal(9,'YlOrRd') # 生成某個顏色類型的9種顏色
pal <- colorRampPalette(mycolor) # 生成顏色梯度
mycolors <- pal(24) # 設(shè)置生成24個梯度
# 上面兩行代碼等價于 mycolors <- colorRampPalette(mycolor)(24)
barplot(1:24,col = mycolors)
生成的結(jié)果如下:

總結(jié)
-
display.brewer.all()調(diào)用所有的配色方案(圖示) -
brewer.pal.info展示所有的配色方案(文字) -
display.brewer.pal(num,clor_name)如:display.brewer.pal(11,'BrBG') - 使用
colorRampPalette函數(shù)創(chuàng)建顏色梯度
rPlotter配色——所見即所得
第一次知道這個包,來自于Y叔那篇“食色性也”的文章。雖然上述的 RColorBrewer 包給了我們很多優(yōu)秀的配色,但是很多時候我們偶然看到了一個圖片、一個海報、一幀電影畫面,想要利用其中的配色該怎么辦呢?你可能會覺得這怎么可能?但是 rPlotter 包讓不可能成為可能。
它是怎么實現(xiàn)的呢?主要是利用 EBImage 包將圖片讀入,并存儲為一個RGB的三維矩陣。然后利用k-means
聚類,把中心點顏色報出來即可。下面簡單的介紹一下使用方法,并給出幾個例子:
先隨機(jī)找個圖,比如電影《你的名字》海報:
[圖片上傳失敗...(image-5a79c5-1586482322683)]
# 加載包
library('rPlotter')
# 將圖片鏈接存入,轉(zhuǎn)換為三局矩陣,并設(shè)置所需顏色的
pal = extract_colours("http://img5.mtime.cn/CMS/News/2017/09/28/095202.11304096_620X620.jpg")
barplot(1:5, col=pal)
結(jié)果如下,明顯比我之前的紅黃藍(lán)好多了…… 以后在辦公室看動畫,再也不怕被訓(xùn)了,可以大聲的告訴導(dǎo)師,我在為figure選配色?。?!
聲明一下,如果因此被老板訓(xùn),我不負(fù)責(zé)~

安裝
rPlotter 包的安裝有點麻煩,下面是官方推薦的安裝流程。我試了試這個安裝流程,雖然中間出現(xiàn)了幾個問題,但是按照錯誤提示,最后還是可以成功安裝的。
## CRAN Packages
install.packages(c("ggplot2", "stringr", "reshape2", "dichromat"))
## EBImage
source("http://bioconductor.org/biocLite.R")
biocLite("EBImage")
## Packages on GitHub
library(devtools)
install_github("ramnathv/rblocks")
## And finally ...
install_github("woobe/rPlotter")