2013-12-08 614 views
37

我一直在閱讀這兩個函數的文檔ggplot2。我想知道哪些區別以及使用每個功能的正確情況(facet_wrap()facet_grid())。ggplot2中facet_wrap()和facet_grid()有什麼區別?

library(ggplot2) 

p <- qplot(displ, hwy, data = mpg) 
p + facet_wrap(~ cyl) 

p + facet_grid(~ cyl) 

我提供這個小例子作爲起點。區別似乎是包裝使得情節更加獨立,並且網格使一個情節一起。

+5

如果你沒有意識到hadley有這裏的電子文檔版本:http://docs.ggplot2.org/current/。這些可能有助於瞭解這兩種功能之間的區別。 –

回答

24

下面的答案是指在facet_grid()facet_wrap()中有2個參數的情況。

facet_grid(x ~ y)即使有些圖是空的,也會顯示x*y圖。 例如:

library(ggplot2) 
g <- ggplot(mpg, aes(displ, hwy)) 

有4個不同的cyl和7個不同的類別值。

g + geom_point(alpha=1/3) + facet_grid(cyl~class) 

有4個不同的cyl和7個不同的類別值。 上面顯示的是4 * 7 = 28的圖表,即使有些圖表是空的(因爲有些類沒有相應的柱面值,就像class =「midsize」的行沒有任何對應的cyl =「5」值) facet_wrap(x ~ y)另一方面,只顯示具有實際值的圖。

g + geom_point(alpha=1/3) + facet_wrap(cyl~class) 

現在有19個地塊顯示,每個組合爲cyl和class。

20

facet_wrap(...)串在一起ggplots在基於單個變量的不同框架(小平面)。 facet_grid(...)可以採取兩個變量:

p + facet_grid(cyl~class) 

還可以在每個小面使用第三變量組:

qplot(displ, hwy, data=mpg,color=factor(year)) + facet_grid(cyl~class) 

示出了通過在#cylinders HWY里程的改善(或缺乏)與位移和班級。

+4

'facet_wrap'也可以帶兩個變量。 – marbel

4

對於單變量圖,您可以使用facet_grid()facet_wrap()

facet_wrap(~variable)將返回關於variable的層數的對稱矩陣圖。

facet_grid(.~variable)將返回等於水平分佈的水平variable的方面。

facet_grid(variable.~)將返回等於垂直分佈的variable的等級。