限時干貨下載:添加微信公眾號“數(shù)據(jù)玩家「fbigdata」”
回復【7】免費獲取【完整數(shù)據(jù)分析資料?。ò⊿PSS、SAS、SQL、EXCEL、Project)!】
來源:EasyCharts,獲授權(quán)轉(zhuǎn)載。
今天這篇主要講解R語言顏色綜合運用,主要跟大家介紹如何提取那些專業(yè)色彩包中的顏色搭配用于在基礎(chǔ)繪圖系統(tǒng)和高級繪圖系統(tǒng)中共享。
其實無論是R語言的預設(shè)配色系統(tǒng)、自定義顏色表還是哪些專屬配色包,我們所使用(或者R語言識別的)的僅僅就是一組字符向量所代表的色值而已,并不神秘。
通過scales中的色彩獲取函數(shù),我們可以將專屬配色主題(RColorBrewer、ggthemes)中的配色主題提取出來,以函數(shù)的形式傳遞給基礎(chǔ)繪圖系統(tǒng)(plot)以及ggplot繪圖系統(tǒng)。
本文按照三部分進行講解:
RColorBrewer部分:
ggthemes部分:
scales::brewer.pal運用:
RColorBrewer部分
關(guān)于RColorBrewer包之前在寫ggplot函數(shù)系統(tǒng)的時候已經(jīng)有所涉獵,其中專門講解過它的官方配色網(wǎng)站:http://colorbrewer2.org/#
這是一個非常神奇的網(wǎng)站,RColorBrewer包中的配色方案全部來源于此,而且網(wǎng)站上允許自定義色彩序列和類型,衍生出來的顏色要比該包中的配色資源多出很多倍。
library(RColorBrewer)
display.brewer.pal(n, name)
display.brewer.all(type="all")
ColorBrewer設(shè)計團隊將配色方案分為三種:
seq:連續(xù)漸變色
div:雙向漸變色
qual:分類色
通過display函數(shù)可以查看不同類型的色板:
顏色查看:
display.brewer.all(type = "all") #查看所有色板
display.brewer.all(type = "seq") #查看單色漸變色板
display.brewer.all(type = "div") #查看雙色漸變色板
display.brewer.all(type = "qual") #查看離散(分類)色板
以上通過display四個函數(shù)成功顯示了全部色板、單色漸變色板、雙色漸變色板、離散(分類)色板
當然你也可以通過display.brewer.pal(n, name)函數(shù)顯示指定名稱的顏色主題:
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()
大家已經(jīng)看到了,通過brewer.pal(n, "name")函數(shù),可以很輕松的提取出你想要的配色主題。
如果你想要某個配色主題的其中幾個色值,可使用如下方式提?。?/p>
display.brewer.pal(6, "BuGn")#按順序提取前六個
如果想要提取某一組色彩主題不連續(xù)的顏色,可以使用文本函數(shù):
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)
其實都是些很簡單的文本函數(shù)組合,畢竟色彩方案在軟件中也就是一組字符向量而已。
以上這些色彩方案可以很容易的應(yīng)用到基礎(chǔ)繪圖系統(tǒng)和ggplot繪圖系統(tǒng)中。
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包原本是轉(zhuǎn)為ggplot2包開發(fā)的輔助包(前面加的前綴——gg就可以看出來,這種包還有很多),里面提供了大量高質(zhì)量的主題、顏色方案。其中就有我們所熟知的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))
其實關(guān)于economist和wsj的配色主題遠不止這些元素,里面規(guī)定了詳細的序列用色標準、線條用色標準、形狀標準和背景色參考方案,這些信息,你可以通過使用ggthemes_data函數(shù)進行查看:
#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函數(shù)進行顏色的圖形化輸出:
顯示主題顏色:
《華爾街日報》
show_col(ggthemes_data$wsj$bg) #背景色
show_col(ggthemes_data$wsj$palettes$rgby) #rgby
show_col(ggthemes_data$wsj$palettes$red_green) #red_green
show_col(ggthemes_data$wsj$palettes$black_green) #black_green
show_col(ggthemes_data$wsj$palettes$dem_rep) #dem_rep
show_col(ggthemes_data$wsj$palettes$colors6) #colors6
《經(jīng)濟學人》
show_col(ggthemes_data$economist$bg) #背景色
show_col(ggthemes_data$economist$fg) #主題色
show_col(ggthemes_data$economist$stata) #基于stata的配色方案
以上ggthemes包中的所有顏色,你都可以通過names_pal()(n)的格式進行提取,然后使用文本函數(shù)進行抽取、轉(zhuǎn)化、合并,自由搭配出屬于自己的專屬配色方案
scales包的brewer_pal函數(shù):
接下來的時間我會將全部精力放在brewer_pal函數(shù)上,告訴你為什么,因為這個函數(shù)是scales專門為圖形標度所設(shè)置的顏色設(shè)置函數(shù),而以上我們所述的RColorBrewer里面的brewer.pal以及ggthemes包中的names_pal函數(shù),是用于提取自己的配色方案,適用范圍較小。
library("scales")
brewer_pal(type = "seq", palette = 1, direction = 1)
該函數(shù)直接對接RColorBrewer包中的配色主題,但是增加了一些輸出參數(shù),可以對輸出的主題進行更加靈活的自定義操作。
type設(shè)置顏色種類,palette設(shè)置色板(可以是字符名稱,也可以是編號),direction設(shè)置顏色輸出順序(默認為原始順序,-1代表倒序,對于連續(xù)漸變類型的色板比較重要)。
show_col(brewer_pal()(10))
show_col(brewer_pal("div")(5))
show_col(brewer_pal(palette = "Greens")(5))
可以看出來,brewer_pal()函數(shù)允許通過色板類型、色彩數(shù)據(jù)、主題類型進行篩選輸出。
我們可以通過brewer_pal函數(shù)將色彩信息傳遞給指定向量,或者直接將brewer_pal指定給col或者fill等圖表中的標度參數(shù)。
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的色彩主題函數(shù)scale_fill(colour)_brewer(),用于對接RColorBrewer中的色彩庫,所以我們想要在ggplot圖表系統(tǒng)中使用RColorBrewer中的配色主題,不必使用brewer_pal進行提取。
并且,brewer_pal函數(shù)內(nèi)的參數(shù),在scale_fill(colour)_brewer()函數(shù)內(nèi)也可以使用,對色彩方案進行篩選、抽取。
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)
除此之外,還有一個叫g(shù)gtech的包,專門為ggplot2包提供科技公司風格配色方案。仔細看了包,沒有取色函數(shù),但是提供了全部的色值信息。
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)
以上是今天所要講的主要內(nèi)容,因為關(guān)于這塊兒的內(nèi)容,非常豐富,我也只能涉略一點兒,想要了解更多的R語言配色知識,可以參考詳細的官方文檔。
其實這一系列內(nèi)容還有一個姊妹篇(上篇《R預設(shè)配色系統(tǒng)及自定義色板》),推送在小魔方的個人公眾號——“數(shù)據(jù)小魔方”上,主要內(nèi)容是關(guān)于R語言預設(shè)的配色系統(tǒng)和目前可以調(diào)用的自定義顏色的調(diào)取與組合、轉(zhuǎn)換等信息。如果你想要了解詳情的話,可以去那里查看,閱讀原文可以直達。