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

deb*_*ner 3 string r 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")
Run Code Online (Sandbox Code Playgroud)

其中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")
}
Run Code Online (Sandbox Code Playgroud)

这只给了我一个箱形图(而不是2),好像它永远不会理解因子(Variable1)命令(并且做了整个变量2的单个箱图,而不是先将它们按变量1级别分开,然后将它们打印出来) .

Her*_*oka 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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述