分面也就是切割數據生成一系列小聯號圖,每一個小圖表示不一樣的數據子集。本篇將討論如何較好的微調分面,特別是與位置標度相近的方法。3d
在qplot中能夠選擇分面系統。2維分面使用face_grid,1維分面使用face_wrap。blog
分面一般會佔用大量空間,所以本篇使用mpg數據集的子集來進行展現。element
> library(ggplot2) > mpg2 <- subset(mpg,cyl != 5 &drv %in% c("4","f"))
1.網格分面it
網格分面在2維網格中展現圖形,輸入分面表達式時,你須要設定哪些變量做爲分面繪圖的行,哪些變量做爲列,規則以下:io
> qplot(cty,hwy,data=mpg2) + facet_null()
電腦屏幕一般較寬,所以這個方向最合適數據的展現。另外,由於座標軸相同,這個方向也有助於y位置的比較。class
qplot(cty,hwy,data=mpg2) + facet_grid(. ~ cyl)
橫座標軸相同,利於x位置的比較,尤爲是對數據分佈的比較。變量
> qplot(cty,data=mpg2,geom="histogram",binwidth=2) + facet_grid(cyl ~ .)
咱們一般都將因子水平數目最大的變量按列排放,這樣能夠充分利用屏幕的寬高比。date
> qplot(cty,hwy,data=mpg2) + facet_grid(drv ~ cyl)
從以上圖形咱們能夠看出,變量在某行或者某列一塊兒出現時,圖形只會展現數據中出現的變量組合。而變量在行和列都出現時,圖形將展現全部變量組合,包括原始數據中都沒有出現的組合。不過這也可能會致使出現空白麪板。grid
邊際圖:能夠參考margins來繪製邊際圖。設定margins=TRUE可展現全部的邊際圖,或者margins=c("sex","age"),列出你要展現的邊際圖的變量名稱。也可使用grand_row或grand_col來生成行或列的邊際圖。技巧
邊際圖的分組方式與其餘面板中分組方式相同:默認使用圖層中全部分類變量的交互做用。下面第三張圖表示對每一個驅動類型添加彩色平滑線。
> p <- qplot(displ,hwy,data=mpg2) + geom_smooth(method = "lm",se=F) > p + facet_grid(cyl ~ drv) > p + facet_grid(cyl ~ drv,margins = T)
> qplot(displ,hwy,data=mpg2) + geom_smooth(aes(colour=drv),method="lm",se=F)+
+ facet_grid(cyl ~ drv,margins=T)
2.標度控制
對於上述分面,能夠經過調整參數scales來控制面板的位置標度是固定的仍是容許變化的。
下面展現了固定標度與自由標度間的差別:
> library(ggplot2) > p <- qplot(cty,hwy,data=mpg) > p + facet_wrap(~ cyl) ##下圖左 每一個分面中固定標度即橫縱座標範圍相同 > p + facet_wrap(~ cyl,scales="free") ##下圖右 自由標度即橫縱座標範圍可變 >
固定標度可讓咱們在相同的基準上對子集進行比較,觀察在哪些地方各子集有類似的整體模式。而自由標度能夠幫助咱們發現更多細節,它在展現不一樣量綱的時間序列時很是有用。
> library(reshape2) > em <- melt(economics,id = "date") > qplot(date,value,data=em,geom="line",group=variable)+ + facet_grid(variable~.,scale="free_y") >
上圖展現了自由標度在展現不一樣量綱的時間序列時很是有用。
3.分組與分面
與經過調整圖形屬性不一樣(好比顏色、形狀或大小)來分組分組不一樣,分面提供了另一種分組途徑。依據子集相對位置的不一樣,這兩種繪圖技巧都有相應的優缺點。
在分面圖形中,每一個組別都在單獨的面板中,相隔較遠,組間無重疊。所以組與組之間重疊嚴重時,分面圖形有必定的好處。不過這也會致使組間的細微差異難以被發現。使用圖形屬性區分各組時,各組將會離得很近甚至可能重疊,不過細微得差異將會容易被發現。下圖展現了二者優缺點得互補。
> library(ggplot2) > xmaj <- c(0.3,0.5,1,3,5) > xmin <- as.vector(outer(1:10,10^c(-1,0))) > ymai <- c(500,1000,5000,10000) > ymin <- as.vector(outer(1:10,10^c(2,3,4))) > dplot <- ggplot(subset(diamonds,color %in% c("D","E","G","J")),aes(carat,price,colour=color)) + + scale_x_log10(breaks = xmaj,labels = xmaj,minor = xmin)+ + scale_y_log10(breaks=ymai,labels=ymai,minor=ymin)+ + scale_colour_hue(limits = levels(diamonds$color))+ + theme(legend.position="none") > dplot + geom_point()
> dplot + geom_point()+facet_grid(.~color)
> dplot + geom_smooth(method=lm,se=F,fullrange=T)
> dplot + geom_smooth(method=lm,se=F,fullrange=T)+facet_grid(.~color)
在散點圖中,僅使用顏色區分各組,咱們可能還沒注意到圖形重疊了,可是迴歸線卻可讓咱們看到D、E、和G被分組在一塊兒,與J組相距甚遠。
4.並列與分面
分面可繪製出與圖形並列相似得圖形效果。
> qplot(color,data=diamonds,geom="bar",fill=cut,position="dodge") ##並列 > qplot(cut,data=diamonds,geom="bar",fill=cut)+facet_grid(.~color)+ + theme(axis.text.x=element_text(angle=90,hjust=1,size=8,colour="grey50")) ##分面
除標註方式外,當兩個變量得因子水平幾乎徹底交叉,而部分變量組合缺失時,兩種繪圖方式也就會有所不一樣。此時,並列圖形得用處不大,由於它只是對條形局部地分割,沒有任何標籤。而分面就實用不少,它能控制分割方式時局部得仍是全局得。