R數據可視化--ggplot2定位之分面

分面也就是切割數據生成一系列小聯號圖,每一個小圖表示不一樣的數據子集。本篇將討論如何較好的微調分面,特別是與位置標度相近的方法。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()

  

  • 一行多列 :". ~ a"

電腦屏幕一般較寬,所以這個方向最合適數據的展現。另外,由於座標軸相同,這個方向也有助於y位置的比較。class

 qplot(cty,hwy,data=mpg2) + facet_grid(. ~ cyl)

  

  • 一列多行:"b ~ ."

橫座標軸相同,利於x位置的比較,尤爲是對數據分佈的比較。變量

> qplot(cty,data=mpg2,geom="histogram",binwidth=2) + facet_grid(cyl ~ .)

  

  • 多行多列:"a ~ b"

咱們一般都將因子水平數目最大的變量按列排放,這樣能夠充分利用屏幕的寬高比。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來控制面板的位置標度是固定的仍是容許變化的。

  • scales = "fixed":x和y的標度在全部面板中都相同
  • scales = "free":x和y的標度在每一個面板均可以變化
  • scales = "free_x":x的標度可變,y的尺度固定
  • scales = "free_y": y的標度可變,x的尺度固定‘

下面展現了固定標度與自由標度間的差別:

> 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")) ##分面

  

除標註方式外,當兩個變量得因子水平幾乎徹底交叉,而部分變量組合缺失時,兩種繪圖方式也就會有所不一樣。此時,並列圖形得用處不大,由於它只是對條形局部地分割,沒有任何標籤。而分面就實用不少,它能控制分割方式時局部得仍是全局得。

相關文章
相關標籤/搜索