88

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

library(ggplot2)

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

p + facet_grid(~ cyl)

我提供这个小例子作为起点。不同之处似乎是 wrap 使图更加自主,而网格使一个图全部在一起。

4

4 回答 4

68

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

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 * 7 = 28 个图,即使有些是空的(因为有些类没有对应的柱面值,例如带有 class="midsize" 的行没有任何对应 facet_wrap(x ~ y)的cyl="5" 值)手,仅显示具有实际值的图。

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

现在显示了 19 个图,每个 cyl 和 class 组合一个。

于 2015-05-17T00:20:35.383 回答
24

facet_wrap(...)ggplots基于单个变量的不同框架(构面)中的字符串。facet_grid(...)可以取两个变量:

p + facet_grid(cyl~class)

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

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

显示了高速公路里程与排量的改善(或缺乏)#汽缸和等级。

于 2013-12-08T19:49:44.813 回答
15

主要引用 ggplot2 book, p。148f.,在线版本:https ://ggplot2-book.org/facet.html

刻面分为三种类型:

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

在此处输入图像描述

刻面包裹

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

ncol您可以使用、和控制功能区如何包裹到网格nrow中 。并控制多少列和多少行(你只需要设置一个)。控制面的布局是像表格(控制环绕的方向: 水平垂直as.tabledirncolnrowas.tableTRUEFALSEdir

刻面网格

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))

在此处输入图像描述

(简化)示例取自?facet_grid

于 2019-12-31T14:41:49.307 回答
10

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

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

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

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

于 2017-04-19T22:50:41.213 回答