【问题标题】:Why can facet_wrap() in ggplot2 be expressed with either a tilde (~) or vars()?为什么 ggplot2 中的 facet_wrap() 可以用波浪号 (~) 或 vars() 表示?
【发布时间】:2022-10-18 11:35:47
【问题描述】:

如果我理解正确,R 中的波浪号 (~) 通常表示匿名函数或公式。在ggplot2 中,您可以使用facet_wrap() 根据具有多个级别的因子变量将您的图拆分为多个方面。有两种不同的表达方式,它们都产生相似的结果:

# load starwars and tidyverse
library(tidyverse)
data(starwars)

使用~

ggplot(data = starwars, mapping = aes(x = mass)) + 
   geom_histogram(fill = "blue", alpha = .2) + 
   theme_minimal() + 
   facet_wrap( ~ gender, nrow = 1)

vars()

ggplot(data = starwars, mapping = aes(x = mass)) + 
  geom_histogram(fill = "blue", alpha = .2) + 
  theme_minimal() + 
  facet_wrap( vars(gender), nrow = 1)

vars()~ggplot2 中如何等效? ~ 如何以类似于或等效于其在 R 中作为匿名函数或公式的典型用法的方式使用?这里好像不是函数?有人可以帮助澄清vars()~facet_wrap() 是如何表示同一件事的吗?

【问题讨论】:

    标签: r ggplot2 visualization facet


    【解决方案1】:

    这两个地块应该是相同的。

    ggplot2 中,vars() 只是一个引用函数,它接受要评估的输入,在这种情况下,它是用于形成分面组的变量名。换句话说,您提供的列(通常是具有多个级别的变量)将被自动引用,然后在数据的上下文中进行评估以形成小图面板。当您想创建要包装的函数时,我建议使用 vars() 输入大约facet_wrap();这要容易得多。

    另一方面,~ 是特定于 facet_wrap() 函数的语法。例如,facet_wrap(~ variable_name) 并不意味着对某些公式表达式的估计。相反,作为右侧有一个变量的单边公式,这就像告诉 R 以当前形式向函数提供变量,这只是列本身的名称。这很令人困惑,因为我们通常使用~ 来表示 x 和 y 之间的关系。在这种情况下,情况是一样的。 ~ 左侧缺少的因 y 变量代表行值,而 ~ 右侧的独立 x 变量代表列。请注意,该函数可能已经知道 y 变量,该变量通常在 aes() 调用中指定。在facet_wrap(~ ...) 上分层只是一种在 x 变量的每个维度(级别)上划分这些 y 值(行)的快速方法。

    【讨论】:

    • 解释的很清楚!谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 2011-04-06
    • 1970-01-01
    • 2022-07-04
    • 2018-02-27
    • 2017-01-24
    • 2011-09-09
    • 2011-09-22
    相关资源
    最近更新 更多