今天跟大家分享ggplot圖表的配色原理與基本技巧。
圖表配色是一個很深奧的話題,多虧了R語言平台的衆多開發者貢獻的配色包,讓圖表的配色不再深不可測。
這裡我暫且将所有的配色場景劃分為兩類:
離散變量配色與連續變量配色
ggplot函數的配色機制相對來說比較智能,當你給colour或者fill屬性指定給變量映射的時候,該函數就會自動的區分變量屬性(是離散變量或者是連續變量),進而給出适用于兩種情況的配色風格。
ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()

ggplot(diamonds,aes(carat,price,colour=depth))+geom_point()
大家可以對比以上兩句代碼:我并沒有指定任何實際的顔色,隻是将colour顔色屬性指定給離散變量cut或者連續變量depth,而輸出的圖表已經完成了預設的離散顔色映射和連續顔色漸變映射。
對于以上兩種類型顔色使用場景,如果是要自行修改,則需要自行定義顔色标度:
離散顔色标度:
scale_colour_XXX:
這裡最經常适用的三種情況
第一種情況,使用ggthemes包中的顔色主題,其中有些非常流行的顔色主題,如經濟學人的主題scale_colour_economist()、scale_colour_wsj(),還有excel的主題、tableau主題以及stata主題。
第二種情況,可以使用RColorBrewer包中的配色卡,以下是該包scale_colour_brewer()函數所允許使用的所有離散顔色色卡。
該配色系統方案給予我們三種關于分類變量的配色場景:
同色系方案,即在同一個色系中均勻取出若幹個色段,用于分類變量填充,最終呈現的效果,看起來非常清爽,圖中最上面的一排顔色均為此類。(适用于表達有序因子分類變量,比如GDP的分段呈現等)
二分色系方案,即兩個色系方向平滑過渡,均勻取值,中間色一般為白色或者淡色。(适用于表達含有正負值的分類數量段,譬如增長率名額、利潤率等)
多分類不同色系方案,取不同色系相對協調的一組顔色,這種情況比較适合用于表達僅作分類,分類項之間沒有順序和大小的普通情況。
以上色卡以及配色包是由一個著名的專做地圖可視化配色方案的團隊所開發的,網址如下,提供線上配色并免費下載下傳服務。(網站可能被屏蔽,如無法打開需要使用V**)
http://colorbrewer2.org/#
當然第三種就是自己DIY了,R支援直接調用可識别的顔色名稱以及顔色代碼(16進制代碼)。
scale_fill_manual(values=c("#FB882C","#5B88A0"))
或者
scale_fill_manual(values=c("Linen","Peru","PeachPuff","SandyBrown","Chocolate"))
而針對連續型變量顔色修改的情況,可探讨的餘地不多:
scale_fill_gradient()
scale_fill_gradient2()
scale_fill_gradient()允許配置設定一組雙色連續漸變,low="white",high="red"
scale_fill_gradient2()允許配置設定一組三色連續漸變,low="blue",mid="white",high="red"
接下來針對以上幾種情況,我分别示範一個案例:
library("ggthemes")
library("RColorBrewer")
離散型:
###使用ggthemes包中的顔色主題(華爾街日報的主題色模闆)
ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+scale_colour_wsj()
###使用RColorBrewer包中的配色卡
ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+scale_colour_brewer(palette="Greens")
###使用DIY方式自己制作配色卡
ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+scale_colour_manual(values=c("#84CEFC","#ACDAE4","#5C9EA4","#04FEFC","#4CD2CC"))
連續型:
雙色漸變:
ggplot(diamonds,aes(carat,price,colour=depth))+geom_point()+scale_colour_gradient(low="white",high="Blue")
三色漸變:
ggplot(diamonds,aes(carat,price,colour=depth))+geom_point()+scale_colour_gradient2(low="#8E0F2E", mid="#BFBEBE", high="#0E4E75")
以上就是R中最常用到的配色技巧,可以滿足我們大部分使用場景的需求。