【问题标题】:how to use aes_string for groups in ggplot2 inside a function when making boxplot制作箱线图时如何在函数内的ggplot2中使用aes_string组
【发布时间】:2016-01-14 03:45:52
【问题描述】:

ggplot2 的新手,我已经在网上搜索过,但仍然无法弄清楚这一点。 我了解如何在 ggplot2 中绘制箱线图,我的问题是当它位于函数内部时,我无法传递用于组的变量。

所以,通常情况下(即不在函数内),我会这样写:

ggplot(myData, aes(factor(Variable1), Variable2)) +
    geom_boxplot(fill="grey", colour="black")+
    labs(title = "Variable1 vs. Variable2" ) +
    labs (x = "variable1", y = "Variable2")

myData 是我的数据框 变量 1 是一个 2 水平因子变量 变量 2 是一个连续变量 我想通过它的 2 个级别/组制作变量 1 的箱线图 这工作正常, 但是一旦我在一个函数中写了这个,我就无法让它工作。

我在编写函数时的尝试:

myfunction = function (data, Variable1) {
    ggplot(data=myData, aes_string(factor("Variable1"), "Variable2"))+
    geom_boxplot(fill="grey", colour="black")+
    labs(title = paste("Variable1 vs. Variable2" )) +
    labs (x = "variable1", y = "Variable2")
}

这只给了我一个箱线图(而不是 2),就好像它从来没有理解 factor(Variable1) 命令(并且对整个变量 2 做了一个箱线图,而不是先将它们按变量 1 级别分开,然后箱线图它们)。

【问题讨论】:

    标签: r string ggplot2


    【解决方案1】:

    Aes_string 评估整个字符串,因此如果您执行sprintf("factor(%s)",Variable1),您将获得所需的结果。进一步说明:您的函数有一个数据参数,但在绘图内您使用myData。我还编辑了 x-lab 和标题,以便您可以传递“Variable3”并获得正确的标签。

    一些示例数据:

    set.seed(123)
    dat <- data.frame(Variable2=rnorm(100),Variable1=c(0,1),Variable3=sample(0:1,100,T))
    
    myfunction = function (data, Variable1) {
      ggplot(data=data, aes_string(sprintf("factor(%s)",Variable1), "Variable2"))+
        geom_boxplot(fill="grey", colour="black")+
        labs(title = sprintf("%s and Variable2", Variable1)) +
        labs (x = Variable1, y = "Variable2")
    }
    
    p1 <- myfunction(dat,"Variable1")
    p2 <- myfunction(dat,"Variable3")
    

    【讨论】:

    • 非常感谢!这完美地工作。我不知道 sprintf(),非常方便!你是对的,我在函数内部的 myData 上犯了一个错误。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2013-01-22
    • 1970-01-01
    相关资源
    最近更新 更多