R數據可視化----ggplot2之標度、座標軸和圖例詳解

標度控制着數據到圖形屬性的映射,當有須要時,ggplot2會自動添加一個默認的標度。咱們確實能夠在不瞭解標度運行原理的狀況下畫出許多圖形,但理解標度並學會如何操縱它們則將賦予咱們對圖形更強的控制能力。express

每一種圖形屬性都擁有一個默認的標度,此標度將在咱們每次使用這個圖形屬性時被自動添加到圖形中,這些標度列於下表中,默認屬性粗體顯示:ide

圖形屬性 離散型 連續型
顏色和填充色

brewer函數

grey3d

hueorm

identityblog

manualit

gradientio

gradient2table

gradientnast

位置 discrete

continuous

date

形狀

shape

identity

manual

 
線條類型

linetype

identity

manual

 
大小

identity

manual

size

 

若是要添加一個不一樣的標度或修改默認標度的某些特徵,咱們必須構建一個新的標度,而後使用+將其添加到圖形上。全部的標度構建器(scale)都擁有一套通用的命名方案,它們以scale_開頭,接下來是圖形屬性的名稱(例如:colour_,shape_,或x_)最後以標度的名稱結尾(gradien、hue或manual)。好比scale_x_discrete().離散圖形的顏色屬性的默認標度名爲scale_colour_hue(),填充色的Brewer配色標度名爲scale_fill_brewer()。

> p <- qplot(sleep_total,sleep_cycle,data=msleep,colour=vore)
> p    ##默認參數
> p + scale_colour_hue("what does\nit eat?",breaks=c("herbi","carni","omni",NA),labels=c("plants","meats","both","don't know"))  ##調整標度的參數

  

標度詳解,可大體分爲幾組:

  • 位置標度,用於將連續型、離散型和日期時間型變量映射到繪圖區域,以及構造對應的座標軸。
  • 顏色標度,用於將連續型和離散型變量映射到顏色
  • 手動標度,將離散型變量映射到咱們選擇的符號大小、線條類型、形狀、或顏色

1.通用參數

如下參數對全部標度都通用:

  • name:設置座標軸或圖例上出現的標籤。可使用三個輔助函數xlab(),ylab(),labs()可讓咱們減小部門鍵入。
> p <- qplot(cty,hwy,data=mpg,colour=displ) ##默認標度下圖左1
> p
> p + scale_x_continuous("City mpg")  ##添加x標籤 下圖左2
> p + xlab("City mpg")  ##添加x標籤 與上相同
> p + ylab("Highway mpg")  ##添加y標籤
> p + labs(x= "City mpg",y = "Hightway mpg",colour = "Displacement")  ##添加x、y及colour標度 下圖左3

> p + xlab(expression(frac(miles,gallon)))   ##x標度爲表達式 下圖右1
> 

  

  • limits:固定標度的定義域。連續型標度接受一個長度爲2的數值型向量;離散型標度接受一個字符型向量。一旦設定limits,數據將再也不進行任何訓練。限制定義域能夠幫助咱們移除不想在圖形上展現的數據,任何不在此範圍內的數據將會被丟棄。
  • breaks和labels:breaks控制着顯示在座標軸或圖例上的值。labels指定了應在斷點處顯示的標籤,若設定labels,則必須同時指定breaks。

 

> p  <- qplot(cyl,wt,data=mtcars)
> p  ##圖第一行 (1,1)
> p + scale_x_continuous(breaks = c(5.5,6.5))  ##圖第一行 (1,2)
> p + scale_x_continuous(limits = c(5.5,6.5))  ##圖第一行 (1,3)
> p <- qplot(wt,cyl,data=mtcars,colour=cyl)
> p  ##圖第二行 (2,1)
> p + scale_colour_gradient(breaks=c(5.5,6.5)) ##圖第二行 (2,2)
> p + scale_colour_gradient(limits=c(5.5,6.5)) ##圖第三行 (2,3)

  

      

上圖中第一列使用的是默認的breaks和limits,即limits=c(4,8)和breaks=4:8。中間一列從新設置了breaks:繪圖區域不變,但刻度和標籤的位置都被移動了。

最右列則從新定義了limits,至關多的數據落在了繪圖區域以外。

2.位置標度

每幅圖都必定擁有兩個位置標度,水平位置和豎直位置。ggplot2提供了連續型、離散型以及日期型標度。

咱們能夠自行實施變換,好比咱們能夠直接繪製log10(x),而不去使用scale_x_log10().這兩種作法將在繪圖區域生成徹底相同的結果,可是座標軸和刻度標籤倒是不一樣的。

> qplot(log10(carat),log10(price),data=diamonds)  ##下圖左
> qplot(carat,price,data=diamonds) + scale_x_log10() + scale_y_log10()   ##下圖右
> 

  

上面的圖形主體是相同的,但座標軸上的標籤是不一樣的。

 日期和時間

日期和時間值基本上屬於連續型,但在標註座標軸時有着特殊的處理方式。目前咱們僅支持屬於date類的日期值和屬於POSIXct類的時間值。若是你的日期和時間值是其餘格式的,則須要as.Date()或as.POSIXct()對其進行轉換。

有三個參數能夠控制座標軸外觀和刻度的位置:major、minor、以及format。 

  • 參數major和minor用以按照時間的單位,即年月週日時分秒來指定主要和次要斷點的位置,而且容許以這些單位的倍數出現,好比,major="2weeks"將在每隔兩週的位置放置一個主刻度。若是未指定,日期刻度能夠自動選出合適的默認值。
  • 參數format指定了刻度標籤的格式

咱們經過繪製下圖來演示部分參數的用法:

> library(ggplot2)
> library(scales)
> plot <- qplot(date,psavert,data=economics,geom="line") +
+ ylab("Personal saving rates")+
+ geom_hline(xintercept = 0,yintercept=0,colour="grey50")
> plot                              ##圖爲我的儲蓄率的時間序列圖形,爲默認外觀

  

> plot + scale_x_date(breaks = date_breaks("10 years"))  ##每隔10年爲一斷點

  

> plot + scale_x_date(
+ limits = as.Date(c("2004-01-01","2005-01-01")),  ######使用年月日的格式僅顯示在2004年內的圖形
+ labels = date_format("%Y-%m-%d")
+ )

  

3.顏色標度

連續型

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

  • scale_colour_gradient() 和 scale_fill_gradient():雙色梯度。參數low和high控制梯度兩端的顏色。
  • scale_colour_gradient2() 和 scale_fill_gradient2():三色梯度。順序爲低-中-高,這兩種標度還在中點處擁有一箇中間色。
  • scale_colour_gradientn()   和 scale_fill_gradientn():自定義n色梯度

顏色梯度一般被用來展現一個二維表面的高度。下面咱們將以faithful數據集的一個二維密度估計表面爲例進行說明。

 

> library(ggplot2)
> f2d <- with(faithful,MASS::kde2d(eruptions,waiting,h=c(1,10),n=50))
> df <- with(f2d,cbind(expand.grid(x,y),as.vector(z)))
> names(df) <- c("eruptions","waiting","density")
> erupt <- ggplot(df,aes(waiting,eruptions,fill=density)) + geom_tile()+
+ scale_x_continuous(expand = c(0,0))+
+ scale_y_continuous(expand = c(0,0))
> erupt + scale_fill_gradient(limits = c(0,0.04))  下圖左
> erupt + scale_fill_gradient(limits = c(0,0.04),low="white",high="black") 下圖中
> erupt + scale_fill_gradient2(limits = c(-0.04,0.04),midpoint=mean(df$density)) 下圖右
> 

  

上面左圖爲默認的顏色梯度,中間爲自定義的黑白梯度,右圖中點設爲密度均值的3點梯度。

離散型

默認的配色方案,即scale_colour_hue(),可經過沿着hcl色輪選取均勻分佈的色相來生成顏色。下圖展現了應用於點和條形的三種調色板。

> point <- qplot(brainwt ,bodywt,data=msleep,log="xy",colour=vore)
> point <- qplot(brainwt ,bodywt,data=msleep,log="xy",colour=vore)
> area <- qplot(log10(brainwt),data=msleep,fill=vore,binwith=1)

> area <- qplot(log10(brainwt),data=msleep,fill=vore,binwidth=1)
> point + scale_colour_brewer(palette = "Set1") ##第一行圖左

> point + scale_colour_brewer(palette = "Set2")   ##第一行圖中

> point + scale_colour_brewer(palette = "Paste11") ##第一行圖右

> area + scale_fill_brewer(palette = "Set1") ##第二行圖左

> area + scale_fill_brewer(palette = "Set2") ##第二行圖中

> area + scale_fill_brewer(palette = "Pastel1") ##第二行圖右

> 

  

對於類別型數據點而言,咱們最感興趣的調色板是「Set1」和「Dark2」,對面積而言則是"Set2","Pastel1"和「Pastel2」和「Accent」。

4.手動離散型標度

離散型標度scale_linetype(),scale_size_discrete()和scale_shape()基本上沒有選項,若是想定製這些標度,須要如下手動型標度來建立新的標度:scale_shape_manual(),scale_linetype_manual(),scale_colour_manual()等等。手動型標度擁有一個重要參數values,你可使用它來指定這個標度應該生成的值。如下展現了scale_manual()的使用方法;

> plot <- qplot(brainwt,bodywt,data=msleep,log="xy")
> plot + aes(colour = vore)+
+ scale_colour_manual(values = c("red","orange","yellow","green","blue")) ##下圖左

> colours <- c(carni = "red","NA"="orange",insecti="yellow",herbi="green",omni="blue")

> plot + aes(colour = vore) + scale_colour_manual(values = colours) ##下圖中

> plot + aes(shape = vore) + scale_colour_manual(values = c(1,2,6,0,23))  ##下圖右

  

相關文章
相關標籤/搜索