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


80

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

library(ggplot2)

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

p + facet_grid(~ cyl)

我提供了这个小例子作为起点。差异似乎是包裹性的,使地块更具自治性,而网格使一个地块在一起。

Answers:


59

下面的答案是指在facet_grid()或中有2个参数的情况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个样,即使有些是空的(由于一些类不具有对应气缸的值,比如用类行=“中型”不具有任何相应的CYL =“10”值) facet_wrap(x ~ y)上的另一只显示具有实际值的图。

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

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


25

facet_wrap(...)ggplots根据单个变量在不同的框架(构面)中将字符串串在一起。facet_grid(...)可以采用两个变量:

p + facet_grid(cyl~class)

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

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

图显示了#cylinders和班级的高速公路里程与位移之间的改进(或缺乏)。


11
facet_wrap也可以采用两个变量。
marbel

9

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

facet_wrap(~variable)将返回一个对称的图矩阵,以表示的水平数variable

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

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


1
难道你知道它为什么facet_wrap(~variable)facet_wrap(variable~)
amsquareb

9

报价主要来自ggplot2本书,第2页。148f。

构面分为三种类型:

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

在此处输入图片说明

小面包裹

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

在此处输入图片说明

(简化)示例取自 ?facet_grid

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.