r语言 - 单个变量前面的波浪号 (~) 是什么意思 (facet_wrap)?



我正在浏览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))(。

最新更新