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

mar*_*bel 64 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)
Run Code Online (Sandbox Code Playgroud)

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

小智 43

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

facet_grid(x ~ y)x*y即使某些图表为空,也会显示图表.例如:

library(ggplot2)
g <- ggplot(mpg, aes(displ, hwy))
Run Code Online (Sandbox Code Playgroud)

有4个不同的cyl和7个不同的class值.

g + geom_point(alpha=1/3) + facet_grid(cyl~class)
Run Code Online (Sandbox Code Playgroud)

上述显示器4*7 = 28个样,即使有些是空的(由于一些类不具有对应气缸的值,比如用类行="中型"不具有任何相应的CYL ="10"值) facet_wrap(x ~ y)上的另一手,仅显示具有实际值的图.

g + geom_point(alpha=1/3) + facet_wrap(cyl~class)
Run Code Online (Sandbox Code Playgroud)

现在有19个地块显示,一个用于cyl和class的每个组合.


jlh*_*ard 21

facet_wrap(...)ggplots基于单个变量在不同的框架(构面)中串联在一起.facet_grid(...)可以采取两个变量:

p + facet_grid(cyl~class)
Run Code Online (Sandbox Code Playgroud)

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

qplot(displ, hwy, data=mpg,color=factor(year)) + facet_grid(cyl~class)
Run Code Online (Sandbox Code Playgroud)

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

  • `facet_wrap`也可以带两个变量. (8认同)

mar*_*kus 13

主要引用 ggplot2 book, p. 148f。

刻面分为三种类型:

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

在此处输入图片说明

刻面环绕

facet_wrap()制作一长条面板(由任意数量的变量生成)并将其包装成 2d。如果您有一个具有多个级别的单个变量并希望以更节省空间的方式排列图,这将非常有用。

您可以控制功能区是如何包装成一个网格ncolnrowas.tabledirncolnrow控制多少列和行(你只需要设置一个)。as.table控制面是像表格 ( TRUE)一样布局,最大值在右下角,还是图 ( FALSE),最大值在右上角。dir控制缠绕的方向: ħ orizo​​ntal或v ertical。

刻面网格

From ?facet_gridfacet_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))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

(简化)示例取自 ?facet_grid


小智 7

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

facet_wrap(~variable)将返回一个对称矩阵的图表的级别数variable.

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

facet_grid(variable~.)将返回等于variable垂直分布的水平面.