我一直在阅读这ggplot2
两个功能的文档。我想知道有什么区别,使用每个函数(facet_wrap()
和facet_grid()
)的正确情况是什么。
library(ggplot2)
p <- qplot(displ, hwy, data = mpg)
p + facet_wrap(~ cyl)
p + facet_grid(~ cyl)
我提供了这个小例子作为起点。差异似乎是包裹性的,使地块更具自治性,而网格使一个地块在一起。
Answers:
下面的答案是指在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组合都一个。
报价主要来自ggplot2本书,第2页。148f。
构面分为三种类型:
facet_null()
:单个图,默认设置。facet_wrap()
:将1d面板色带“包裹”到2d中。facet_grid()
:生成由变量定义的二维面板网格,这些变量形成行和列。小面包裹
facet_wrap()
制作一长串面板(由任意数量的变量生成),并将其包裹为2d。如果您具有多个级别的单个变量,并且想要以更节省空间的方式来布置图,这将很有用。
您可以控制功能区是如何包装成一个网格ncol
,nrow
,
as.table
和dir
。ncol
并nrow
控制多少列和行(您只需设置一个)。as.table
控制构面的布局是像表格(TRUE
)一样,在右下角具有最高的值,或者是绘图(FALSE
),其中最大值在右上角。dir
控制缠绕的方向:
ħ orizontal或v ertical。
刻面网格
From ?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))
(简化)示例取自 ?facet_grid
facet_wrap
也可以采用两个变量。