如何拯救我的審美——圖片配色

寫在前面的話

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

image
image

果然沒有一點點做作,好看,顯眼,清晰,自然……

正文

不自黑了,回到正題。在科研的過程中,我想很多人應(yīng)該和我一樣或多或少會遇到畫圖的配色問題。我腦子里想的顏色是這樣的,可一旦用代碼實現(xiàn),就立刻被自己的審美深深的震撼。本文,為了解決這個問題,給出了兩種方法。

RColorBrewer配置所需顏色

RColorBrewer提供了3套配色方案:

  1. 連續(xù)性(Sequential),顏色漸變,由淺到深。通常在畫圖時,我們會使用淺色表示較低的值,深色表示較高的值
  2. 離散型(Qualitative),生成差異顯著的顏色(如前文所說的紅黃藍(lán),但要好看很多),通常用來標(biāo)注分類數(shù)據(jù)。
  3. 發(fā)散性(Diverging),兩端深,中間淺色,強(qiáng)調(diào)從一個深色到另一個神色的漸變(畫熱圖時經(jīng)常會使用)。還可以用這種色調(diào)畫圖以標(biāo)注圖中的離群點。

下面給出三種不同類型配色的調(diào)色盤樣式,可以使用命令 display.brewer.all() 調(diào)用 :

Sequential
Sequential

Qualitative
Qualitative
Diverging
Diverging

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

image
image

  • 第一列給出的是顏色名稱,比如第一個就是 BrBG
  • 第二列給出的是該顏色方案的最大數(shù)量,如 BrBG 類型最多支持11種顏色
  • 第三列給出的就是前面所講的三類配色方案的簡稱。
  • 第四列 colorblind 表示的是否對色盲友好

我們可以使用 display.brewer.pal 命令查看各種配色類型的具體情況,如display.brewer.pal(11,'BrBG') 會出現(xiàn)下面所示的圖案:

image

有時候我們不想使用全部顏色,只想要使用某個配色方案中的三四種顏色怎么辦呢?使用命令 brewer.pal 即可,如我們輸入brewer.pal(11,'BrBG') ,結(jié)果如下:

image

我們可以看到 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é)果如下:


image
image

總結(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é)~

image
image

安裝

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")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容