我正在浏览Hadley Wickham的"R for Data Science",他在ggplot调用中使用~var
。
我理解y ~ a + bx
,其中~
描述了因变量和自变量之间的公式/关系,但这~var
是什么意思?更重要的是,为什么你不能只放置变量本身?请参阅下面的代码:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~ class, nrow = 2)
或
demo <- tribble(
~cut, ~freq,
"Fair", 1610,
"Good", 4906,
"Very Good", 12082,
"Premium", 13791,
"Ideal", 21551
)
ggplot(data = demo) +
geom_bar(mapping = aes(x = cut, y = freq), stat = "identity")
只是ggplot
利用formula
结构让用户决定要对哪些变量进行分面。从?facet_grid
:
为了与经典界面兼容,行也可以是公式,LHS 上的行(表格显示(和 RHS 上的列(表格显示(;公式中的点用于指示此维度上不应有分面(行或列(。
所以facet_grid(. ~ var)
只是意味着在变量var
上对网格进行刻面,刻面分布在列上。它和facet_grid(col = vars(var))
一样.
尽管看起来像一个formula
,但它并没有真正用作公式:它只是一种向 R 呈现多个参数的方式,facet_grid
代码可以清晰明确地解释。
它是特定于facet_wrap
的语法,其中可以给出一个公式作为变量关系的输入。从第一个参数的文档中,facets
:
由 vars(( 引用的一组变量或表达式,以及 在"行"或"列"维度上定义分面组。这 变量可以命名(名称传递给标签器(。为 与经典界面的兼容性,也可以是公式或 字符向量。使用单面公式 '~a b 或 字符向量,c("a", "b"('.
所以我认为你现在可以只给出没有波浪号的变量名称,但你过去需要给出一个带有波浪号的单边公式。
要了解问题中的原因部分,请查看波浪号在绘图中的使用方式。
lattice::xyplot(mpg ~ disp, data=mtcars)
这给出了disp
作为 x 轴(自变量(和mpg
作为 y 轴(因变量(。以此类推,facet_wrap(( 将 ~ 的 RHS 作为分面的列(即水平/x/自变量(,将 LHS 作为分面的行(垂直/y/因变量(。如果您只给出 ~ 的 RHS,则只给出列(如上所述,这相当于facet_grid(col = vars(var))
(。