在制作boxplot时,如何在函数内部的ggplot2中使用aes_string

时间:2016-01-14 03:45:53

标签: r string ggplot2

ggplot2的新手,我已经浏览过网络,但仍然无法解决这个问题。 我理解如何在ggplot2中绘制一个boxplot,我的问题是,当它在一个函数内时,我无法传递我用于组的变量。

所以,通常(即不在函数内部),我会写这个:

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),好像它从未理解因子(Variable1)命令(并且做了整个变量2的单个箱图,而不是先将它们按变量1级别分开,然后boxplot他们)。

1 个答案:

答案 0 :(得分:5)

Aes_string评估整个字符串,因此如果你sprintf("factor(%s)",Variable1)得到了所需的结果。作为进一步的评论:您的函数有一个数据参数,但在绘图中使用myData。我还编辑了x-lab和title,这样你就可以传递'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")

enter image description here