R語言數據可視化——顏色綜合運用與色彩方案共享

今天這篇主要講解R語言顏色綜合運用,主要跟大家介紹如何提取那些專業色彩包中的顏色搭配用於在基礎繪圖系統和高級繪圖系統中共享。

其實無論是R語言的預設配色系統、自定義顏色表還是哪些專屬配色包,我們所使用(或者R語言識別的)的僅僅就是一組字元向量所代表的色值而已,並不神秘。

通過scales中的色彩獲取函數,我們可以將專屬配色主題(RColorBrewer、ggthemes)中的配色主題提取出來,以函數的形式傳遞給基礎繪圖系統(plot)以及ggplot繪圖系統。

本文按照三部分進行講解:

  • RColorBrewer部分:

  • ggthemes部分:

  • scales::brewer.pal運用:

RColorBrewer部分

關於RColorBrewer包之前在寫ggplot函數系統的時候已經有所涉獵,其中專門講解過它的官方配色網站:Color Advice for Maps

這是一個非常神奇的網站,RColorBrewer包中的配色方案全部來源於此,而且網站上允許自定義色彩序列和類型,衍生出來的顏色要比該包中的配色資源多出很多倍。

library(RColorBrewer)display.brewer.pal(n, name)display.brewer.all(type="all")

ColorBrewer設計團隊將配色方案分為三種:

  • seq:連續漸變色

  • div:雙向漸變色

  • qual:分類色

通過display函數可以查看不同類型的色板:

顏色查看:

display.brewer.all(type = "all") #查看所有色板display.brewer.all(type = "seq") #查看單色漸變色板display.brewer.all(type = "div") #查看雙色漸變色板display.brewer.all(type = "qual") #查看離散(分類)色板

以上通過display四個函數成功顯示了全部色板、單色漸變色板、雙色漸變色板、離散(分類)色板

當然你也可以通過display.brewer.pal(n, name)函數顯示指定名稱的顏色主題:

display.brewer.pal(9, "BuGn")

par(mfrow=c(1,5),mar=c(1,1,2,1),xaxs="i", yaxs="i")mycolors<-brewer.pal(9, "BuGn")barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of BuGn ")mycolors<-brewer.pal(9, "OrRd")barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of OrRd")mycolors<-brewer.pal(9, "YlGn")barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of YlGn")mycolors<-brewer.pal(9, "Oranges")barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of Oranges")mycolors<-brewer.pal(9, "Blues")barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of Blues")dev.off()

大家已經看到了,通過brewer.pal(n, "name")函數,可以很輕鬆的提取出你想要的配色主題。

如果你想要某個配色主題的其中幾個色值,可使用如下方式提取:

display.brewer.pal(6, "BuGn")#按順序提取前六個

如果想要提取某一組色彩主題不連續的顏色,可以使用文本函數:

library(scales)a<-brewer.pal(9, "BuGn")show_col(a[c(1,3,5,7,9)],labels=F)

通過向量合併,你還可以自己從色彩包中自定義色彩方案。

b1<-brewer.pal(9, "BuGn");b2<-brewer.pal(9,"Blues")c<-c(b1[c(1,3,5,7,9)],b2[c(2,4,6,8)])show_col(c,labels=F)

其實都是些很簡單的文本函數組合,畢竟色彩方案在軟體中也就是一組字元向量而已。

以上這些色彩方案可以很容易的應用到基礎繪圖系統和ggplot繪圖系統中。

c<-c(50,30,50,70,90,40)names(c)<-LETTERS[1:6]mycolor<-brewer.pal(9,"Greens")pie(sort(c,decreasing=T),labels=names(c),col=mycolor[c(3,5,5,6,7,9)],clockwise=T,radius=1,border=F)

library(ggplot2)library(plyr)mydata<-data.frame(c)ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+ geom_bar(stat="identity",width_=1,col="white")+ coord_polar(theta = "y",start=0)+ theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title = element_blank())+ scale_fill_brewer(palette="Greens",labels=c("E", "D", "A","C","F","B"))+ guides(fill=guide_legend(reverse=TRUE,title=NULL))

ggthemes部分:

接下來講解ggthemes部分,其實ggthemes包原本是轉為ggplot2包開發的輔助包(前面加的前綴——gg就可以看出來,這種包還有很多),裡面提供了大量高質量的主題、顏色方案。其中就有我們所熟知的economist主題方案以及wsj方案,還有諸如stata、excel、tableau、solarized、tufte等主題方案。

ggthemes包中的色彩方案都是打包好,命名過的,所以我們引用的時候,只需賦值即可。

這裡以economist和WSJ為例:

library(ggthemes)m1<-economist_pal()(6)show_col(m1)

mycolor<-m1<-economist_pal()(5)pie(sort(c,decreasing=T),labels=names(6),col=mycolor,border=F,clockwise=T,init.angle=90,radius=1)

ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+ geom_bar(stat="identity",width_=1,col="white")+ coord_polar(theta = "y",start=0)+ theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title = element_blank())+ scale_fill_economist(labels=c("E", "D", "A","C","F","B"))+ guides(fill=guide_legend(reverse=TRUE,title=NULL))

m2<-wsj_pal()(6)show_col(m2)

mycolor<-m1<-wsj_pal()(6)pie(sort(c,decreasing=T),labels=names(c),col=mycolor,border=F,clockwise=T,init.angle=90,radius=1)

ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+ geom_bar(stat="identity",width_=1,col="white")+ coord_polar(theta = "y",start=0)+ theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title = element_blank())+ scale_fill_wsj(labels=names(c))+ guides(fill=guide_legend(reverse=TRUE,title=NULL))

其實關於economist和wsj的配色主題遠不止這些元素,裡面規定了詳細的序列用色標準、線條用色標準、形狀標準和背景色參考方案,這些信息,你可以通過使用ggthemes_data函數進行查看:

#WSJ背景色ggthemes_data$wsj$bg gray green blue brown "#efefef" "#e9f3ea" "#d4dee7" "#f8f2e4"

#WSJ主題色ggthemes_data$wsj$palettes #主題色$rgby yellow red blue green "#d3ba68" "#d5695d" "#5d8ca8" "#65a479" $red_green green red "#088158" "#ba2f2a" $black_green black gray ltgreen green "#000000" "#595959" "#59a77f" "#008856" $dem_rep blue red gray "#006a8e" "#b1283a" "#a8a6a7" $colors6 red blue gold green orange black "#c72e29" "#016392" "#be9c2e" "#098154" "#fb832d" "#000000"

#economist背景色:ggthemes_data$economist$bg#economist主題色:ggthemes_data$economist$fg

也可以使用scales包中的show_col函數進行顏色的圖形化輸出:

顯示主題顏色:

《華爾街日報》

show_col(ggthemes_data$wsj$bg) #背景色show_col(ggthemes_data$wsj$palettes$rgby) #rgbyshow_col(ggthemes_data$wsj$palettes$red_green) #red_greenshow_col(ggthemes_data$wsj$palettes$black_green) #black_greenshow_col(ggthemes_data$wsj$palettes$dem_rep) #dem_repshow_col(ggthemes_data$wsj$palettes$colors6) #colors6

《經濟學人》

show_col(ggthemes_data$economist$bg) #背景色show_col(ggthemes_data$economist$fg) #主題色show_col(ggthemes_data$economist$stata) #基於stata的配色方案

以上ggthemes包中的所有顏色,你都可以通過names_pal()(n)的格式進行提取,然後使用文本函數進行抽取、轉化、合併,自由搭配出屬於自己的專屬配色方案。

scales包的brewer_pal函數:

接下來的時間我會將全部精力放在brewer_pal函數上,告訴你為什麼,因為這個函數是scales專門為圖形標度所設置的顏色設置函數,而以上我們所述的RColorBrewer裡面的brewer.pal以及ggthemes包中的names_pal函數,是用於提取自己的配色方案,適用範圍較小。

library("scales")brewer_pal(type = "seq", palette = 1, direction = 1)

該函數直接對接RColorBrewer包中的配色主題,但是增加了一些輸出參數,可以對輸出的主題進行更加靈活的自定義操作。

type設置顏色種類,palette設置色板(可以是字元名稱,也可以是編號),direction設置顏色輸出順序(默認為原始順序,-1代表倒序,對於連續漸變類型的色板比較重要)。

show_col(brewer_pal()(10))show_col(brewer_pal("div")(5))show_col(brewer_pal(palette = "Greens")(5))

可以看出來,brewer_pal()函數允許通過色板類型、色彩數據、主題類型進行篩選輸出。

我們可以通過brewer_pal函數將色彩信息傳遞給指定向量,或者直接將brewer_pal指定給col或者fill等圖表中的標度參數。

par(mfrow=c(1,2),mar=c(1,1,2,1),xaxs="i", yaxs="i")pie(rep(1,times=6),labels="",col=brewer_pal(palette="Greens")(6),border=F,radius=1,clockwise=T)pie(rep(1,times=6),labels="",col=brewer_pal(palette="Greens",direction =-1)(6),border=F,radius=1,clockwise=T)

因為ggplot中有專用於RColorBrewer的色彩主題函數scale_fill(colour)_brewer(),用於對接RColorBrewer中的色彩庫,所以我們想要在ggplot圖表系統中使用RColorBrewer中的配色主題,不必使用brewer_pal進行提取。

並且,brewer_pal函數內的參數,在scale_fill(colour)_brewer()函數內也可以使用,對色彩方案進行篩選、抽取。

library(Rmisc)library(lattice)

p1<- ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+ geom_bar(stat="identity",width_=1,col="white")+ coord_polar(theta = "y",start=0)+ theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title = element_blank(), legend.position="top")+ scale_fill_brewer(palette="Greens",labels=names(c))+ guides(fill=guide_legend(reverse=TRUE,title=NULL))p2<- ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+ geom_bar(stat="identity",width_=1,col="white")+ coord_polar(theta = "y",start=0)+ theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title = element_blank(), legend.position="top")+ scale_fill_brewer(palette="Greens",direction =-1,labels=names(c))+ guides(fill=guide_legend(reverse=TRUE,title=NULL))multiplot(p1,p2,cols=2)

除此之外,還有一個叫ggtech的包,專門為ggplot2包提供科技公司風格配色方案。仔細看了包,沒有取色函數,但是提供了全部的色值信息。

library(ggtech)tech_key = list(airbnb = c("#FF5A5F","#FFB400", "#007A87", "#FFAA91", "#7B0051"), facebook = c("#3b5998","#6d84b4", "#afbdd4", "#d8dfea"), google = c("#5380E4", "#E12A3C", "#FFBF03","#00B723"), etsy = c("#F14000", "#67B6C3", "#F0DA47", "#EBEBE6", "#D0D0CB"),twitter = c("#55ACEE", "#292f33", "#8899a6", "#e1e8ed"))show_col(tech_key$airbnb)show_col(tech_key$facebook)show_col(tech_key$google)show_col(tech_key$etsy)show_col(tech_key$twitter)

聯繫方式:

wechat:ljty1991

Mail:578708965@qq.com

個人公眾號:數據小魔方(datamofang)

團隊公眾號:EasyCharts

qq交流群:[魔方學院]553270834

推薦閱讀:

R語言可視化——ggplot繪製中心密度輻射圖
R語言可視化——數據地圖離散百分比填充(環渤海)
R語言分析告訴你應避開哪個國家以躲避空難
MySQL入門及其與R的交互

TAG:R | 数据可视化 | 配色 |