1. 程式人生 > >ggplot2學習筆記之顏色標度

ggplot2學習筆記之顏色標度

           除了位置標度之外,最常用的圖形屬性就是顏色了。對於連續型變數有三種基於漸變的方法,對於離散型有兩種方法。rgb 編碼的色彩空間使用了紅、綠、藍三種光的強度來表示一種顏色,這種色彩空間存在個問題:視覺感知上不均勻。這裡使用的是hcl 色彩空間的現代方案,它分別由色相(hue)、彩度(chroma)、明度(luminance)三部分構成。

        以下標度對邊界色(colour)圖形屬性和填充色(fill)圖形屬性均有效。

連續型:

根據顏色梯度色彩數量劃分,共有三類連續型顏色梯度(即漸變色):

  • scale_colour_gradient()和scale_fill_gradient()
    :雙色梯度。順序由低到高,引數low 和high 用於控制此梯度兩端顏色;
  • scale_colour_gradient2()和scale_fill_gradient2():三色梯度。順序為低-中-高,引數low和high 用於控制此梯度兩端顏色,中點預設值是0,可以用引數midpoint 將其設定為任意值;
  • scale_colour_gradientn()和scale_fill_gradientn():自定義的n 色梯度。此標度需要賦給引數colours 一個顏色向量。不加其他引數的話,這些顏色將依照資料的範圍均勻地分佈。如果你需要讓這些值不均勻地分佈,則可以使用引數values。如果引數rescale 的值是TRUE(預設),則values 應在0 和1 之間取值,如果rescale 取值FALSE,則values 應在資料範圍內取值。

           顏色梯度常被用來展示一個二維表面的高度,用以描述第三維度,顏色的深淺代表著不同的值,例如描述地勢高低時,地勢的高低常常用顏色深淺來展現。以下將使用R自帶的一個向量資料集volcano,經過以下轉換成資料框(ggplot2 只接受資料框型別):

<span style="font-size:14px;">library(reshape2)
volcano3d <- melt(volcano)
names(volcano3d) <- c("x", "y", "z")
p <- ggplot(data,aes(x,y,fill=z)) + geom_tile() p
p + scale_fill_gradient(limits=c(120,170))
p + scale_fill_gradient(low = 'blue', high = 'red')</span>

        第一個使用預設引數;第二圖使用了引數 limits=c(120,170),用於控制填充顏色的值範圍,所以小於 120 與大於 170 的值都沒有顏色(即都是灰色);最後一個圖中使用了引數 low 與 high,控制顏色在 low 與 high 之間漸變。
<span style="font-size:14px;">p + scale_fill_gradient2(low = 'blue', high = 'red')
p + scale_fill_gradient2(low = 'blue', high = 'red', midpoint = 150)</span>


        以上兩圖都設定了顏色由 blue 到 red 漸變,但是左圖使用預設引數 midpoint=0,右圖使用引數midpoint=150,而 z 值的範圍是 94~195,所有他們在圖中實際漸變色為,左圖:淺紅-紅,右圖:藍-白-紅 。

<span style="font-size:14px;">p + scale_fill_gradientn(colours = c('black','blue','red','white'))
p + scale_fill_gradientn(colours = topo.colors(10))
p + scale_fill_gradientn(colours = terrain.colors(10))
p + scale_fill_gradientn(colours = heat.colors(10))</span>

離散型:

       離散型資料有兩種顏色標度。一種可以自動選擇顏色,另一種可以輕鬆地手工從顏色集中選擇顏色。


       預設的配色方案,即scale_colour_hue()、cale_fill_hue(),可通過沿著hcl 色輪選取均勻分佈的色相來生成顏色。這種方案對顏色較少時有比較好的效果,但對於更多不同的顏色就不好區分開來。裡面的各個引數就不多說了,具體檢視幫助。

       另一種可選的方案是ColorBrewer 配色,http://colorbrewer.org。使用的是scale_colour_ brewer ()、scale_fill_ brewer ()。要想了解所有的調色盤,可以使用RColorBrewer::display.brewer.all()檢視。以下是調色盤:


          使用時,用引數palette=”調色盤名稱或者數字”。例如,使用第二個調色盤時用palette = 2(等價於palette = 'YIOrBr')。以下以畫箱線圖為例。

<span style="font-size:14px;">dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
(d <- ggplot(dsamp, aes(cut, price, fill = cut)) + geom_boxplot())
d + scale_fill_brewer()
d + scale_fill_brewer(palette = 2)
d + scale_fill_brewer(palette = "Spectral")</span>


             左上圖使用預設配色方案 cale_fill_hue();後三種都是使用第二種配色方案,分別使用的調色盤是:預設調色盤、YIOrBr 調色盤、Spectral 調色盤。