標度控制着數據到圖形屬性的映射,當有須要時,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.通用參數
如下參數對全部標度都通用:
> 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 >
> 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。
咱們經過繪製下圖來演示部分參數的用法:
> 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.顏色標度
連續型
根據顏色梯度中的色彩數量劃分,共有三類連續型顏色梯度(即漸變色):
顏色梯度一般被用來展現一個二維表面的高度。下面咱們將以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)) ##下圖右