ggplot2中facet_wrap()和facet_grid()之间有什么区别?

时间:2013-12-08 19:26:43

标签: r ggplot2 facet-wrap

我一直在阅读这两个功能的ggplot2文档。我想知道使用每个函数(facet_wrap()facet_grid())有什么区别和正确的情况。

library(ggplot2)

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

p + facet_grid(~ cyl)

我提供这个小例子作为起点。差异似乎是包裹使得情节更加自主,网格使得一个情节全部在一起。

4 个答案:

答案 0 :(得分:38)

下面的答案是指facet_grid()facet_wrap()中有2个参数的情况。

即使某些图表为空,

facet_grid(x ~ y)也会显示x*y个图。 例如:

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

有4个不同的圆柱和7个不同的类值。

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

上面显示4 * 7 = 28个图,即使有些是空的(因为有些类没有相应的柱面值,例如类=&#34的行;中等尺寸&#34;没有任何相应的cyl =&#34; 5&#34;值) 另一方面,facet_wrap(x ~ y)仅显示具有实际值的图。

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

现在显示了19个图表,每个图表用于cyl和class的每个组合。

答案 1 :(得分:21)

facet_wrap(...)在基于单个变量的不同框架(构面)中将ggplots字符串组合在一起。 facet_grid(...)可以带两个变量:

p + facet_grid(cyl~class)

您还可以使用第三个变量在每个方面进行分组:

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

显示了#cylinders和class的hwy里程与排量的改善(或缺乏)。

答案 2 :(得分:5)

对于单变量图,您可以使用facet_grid()facet_wrap()

facet_wrap(~variable)将返回variable级别的对称矩阵图。

facet_grid(.~variable)将返回等于水平分布的variable级别的构面。

facet_grid(variable~.)将返回等于垂直分布的variable级别的构面。

答案 3 :(得分:0)

主要引自ggplot2书,p。 148f。

共有三种类型的构面:

  • facet_null():默认为单个图。
  • facet_wrap():将一维面板的条带“包裹”为二维。
  • facet_grid():生成由变量定义的二维面板网格,这些变量形成 行和列。

enter image description here

Facet包裹

facet_wrap()制作了很长的面板功能区(由任意数量的 变量)并将其包装为2d。如果您有一个变量,这很有用 具有多个级别,并希望以更节省空间的方式布置地块 方式。

您可以使用ncolnrowas.tabledirncolnrow控制多少列和行(您只需要设置一个)。 as.table控制构面的布局是否像 表格(TRUE)的右上角是最大值,或者是图表(FALSE), 最高值位于右上角。 dir控制换行的方向: h 原始或 v 垂直

Facet网格

?facet_grid开始:facet_grid()形成由行和列构面变量定义的面板矩阵。当您有两个离散变量,并且变量的所有组合都存在于数据中时,此功能最为有用。

您可以在行或列中使用多个变量,只需将它们“添加”即可 在一起,例如a + b ~ c + d

facet grid()还有一个名为space的附加参数,它使用 与scales具有相同的值。

# If scales and space are free, then the mapping between position
# and values in the data will be the same across all panels. This
# is particularly useful for categorical axes
ggplot(subset(mpg, manufacturer %in% c("audi", "honda", "toyota")) , aes(drv, model)) +
    geom_point() +
    facet_grid(manufacturer ~ ., scales = "free", space = "free") +
    theme(strip.text.y = element_text(angle = 0))

enter image description here

(简化的)示例取自?facet_grid