【问题标题】:Labelling x- and y-axis by the corresponding variable's name in R通过 R 中相应变量的名称标记 x 轴和 y 轴
【发布时间】:2022-01-09 21:50:54
【问题描述】:

起初这听起来像是一个非常微不足道的问题,但到目前为止没有人能够帮助我,因此我正在与大家联系。

我想做以下事情:

我正在编写一个简单的函数,它允许我将两个变量相互绘制,第三个变量为观察点着色(取决于颜色变量的相应值)。代码如下:

scatterplot <- function(data_used, x.variable, y.variable, color.variable) {
  
  ggplot(data_used, aes(x=x.variable, y = y.variable)) +
    geom_point(aes_string(color = color.variable)) 
  
}

scatterplot(data_used = example_data, x.variable = example_data$education, 
            y.variable = example_data$wages, 
            color.variable = example_data$sex)

我现在想要 R 做的是用我决定绘制的相应变量的名称(分别)标记 x 轴和 y 轴。在此示例中,x 轴为“教育”,y 轴为“工资”。

我试图简单地输入+ labs (x = x.variable, y = y.variable),但它不起作用(这样做时,R 通过变量值标记轴!)。默认情况下,R 仅将轴命名为“x.variable”和“y.variable”。

有人可以帮助我实现我想做的事情吗?

最好的问候,

xifrix

【问题讨论】:

  • 您能否使用dput(example_data) 与我们分享您的数据,以便我们尝试重现您的情节。

标签: r function ggplot2 label


【解决方案1】:

jpenzer 的回答很好。这里没有准引用的东西。

scatterplot <- function(data_used, x.variable, y.variable, color.variable) {
  
  ggplot(data_used, aes_string(x=x.variable, y = y.variable)) +
    geom_point(aes_string(color = color.variable)) +
    labs(x=x.variable, y=y.variable, colour=color.variable)
  
}
mtcars %>% 
  mutate(am = as.factor(am)) %>% 
scatterplot(., x.variable = "hp", 
            y.variable = "mpg", 
            color.variable = "am")

【讨论】:

  • 嗨,戴夫,非常感谢您的帮助,代码有效。我真的很感谢你在这方面帮助我。我是否正确,我的代码的主要区别是将我的颜色变量重新编码为因子对象(换句话说,“变异”部分是关键部分吗?如果您可以为您的代码提供简短的口头直觉,那会很棒的。
  • 如果color.variable 不是一个因素,那么您将获得一个色带而不是两个不同的标记点。获得输出并不重要,但在这种情况下它确实使输出看起来更好。
【解决方案2】:

事后看来,我不确定准引用的东西是 100% 必要的,但这是我用于类似需求的模式:

my_scatterplot <- function(data, x, y){
  .x = rlang::enquo(x)
  .y = rlang::enquo(y)
  data %>%
    ggplot(aes(x = x, y = y))+
    geom_point()+
    labs(x = .x, 
         y = .y)
}

如果它不适合你,请告诉我,但它应该。编辑:应该在 DaveArmstrong 的回答之后添加,该函数将在不带引号的情况下调用 x / y 变量,例如

diamonds %>% my_scatterplot(price, table)

【讨论】:

  • 您好,也非常感谢您,尽管我认为您的代码是(至少对我而言!)最不直观的代码。尽管如此,它仍然有效,因此我感谢您抽出宝贵时间为我提供一些见解。
【解决方案3】:

要在函数中传递列名,您可以在函数体中的所需列名周围使用双花括号 {{...}}

library(dplyr)
library(ggplot2)

scatterplot <- function(data_used, x.variable, y.variable, color.variable) {
  
  ggplot(data_used, aes_string({{x.variable}}, {{y.variable}})) +
    geom_point(aes_string(color = {{color.variable}})) +
    labs(x=x.variable, y=y.variable, colour=color.variable)
  
}


scatterplot(mtcars %>% mutate(am = as.factor(am)), x.variable = "mpg", 
            y.variable = "hp", 
            color.variable = "am")

【讨论】:

  • 您好 TarJae,您的回答与 Dave 的回答非常相似。这也有效,而且看起来更简单,因为您将 mutate-operator 实现到告诉函数要绘制什么的代码行中(这行代码是否有特定术语,即我在哪里确定函数的输入? )。也非常感谢您的帮助,您真是太好了。
猜你喜欢
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多