gpt4 book ai didi

r - 通过 R 中的 ggplot 在函数中传递带有可选方面的变量列

转载 作者:行者123 更新时间:2023-12-02 21:30:01 24 4
gpt4 key购买 nike

我试图弄清楚如何使用一个函数创建多个 ggplots,以避免繁琐的复制和粘贴。当我想在同一 data.frame 中使用不同的列时,我不想更改函数中的参数名称。解决这个问题可能有完全不同的方法,但我提供了两次几乎有效但仍然达不到我想要的结果的尝试。谢谢!

编辑我还希望该函数根据参数添加一个方面,例如 groupBy="brand"。我认为 aes_string 位于 https://stat.ethz.ch/pipermail/r-help/2009-October/213946.html 旁边可能会带我去那里。我将分面请求作为问题的一部分包含在内,因为仅 aes_string 达不到我能够将分面作为绘图函数的一部分的目标。我在数据集中添加了品牌,只是为了分享我今天在网上搜索找不到的内容。

library(ggplot2)

### sample data ###
n=25
dataTest = data.frame(
xVar=sample(1:3, n, replace=TRUE),
yVar = rnorm(n, 5, 2),
zVar=rnorm(n, 5, .5),
brand=letters[1:5])

### a first attempt ###
### works, but forces me to create a new function whenever column names need to change
my_plot =function(data) {ggplot(data=data, aes(x=xVar, y=yVar))+geom_bar(stat="identity")}
do.call("my_plot", list(data=dataTest))
### wish for something like this... but this does not work
my_plot = function(data) {ggplot(data=data, aes(x=x, y=y))+geom_bar(stat="identity")}
do.call("my_plot", list(data=dataTest, x=xVar, y=yVar))
do.call("my_plot", list(data=dataTest, x=xVar, y=zVar))

### a second attempt, does not work ###
my.plot = function(x, y, data)
{
arguments <- as.list(match.call())
data = eval(arguments$data, envir=data)
x = eval(arguments$x, envir=data)
y = eval(arguments$y, envir=data)
p=ggplot(data=data, aes(x, y))+geom_bar(stat="identity")
return(p)
}
my.plot(x=xVar, y=yVar, data=dataTest)

最佳答案

使用 aes_string 将允许您将字符串传递到 ggplot2 函数中,从而使您能够更轻松地以编程方式更改它:

my.plot = function(x, y, data)
{
p=ggplot(data, aes_string(x=x, y=y))+geom_bar(stat="identity")
print(p)
}

my.plot(x="xVar", y="yVar", data=dataTest)

yvar

my.plot(x="xVar", y="zVar", data=dataTest)

zvar

关于r - 通过 R 中的 ggplot 在函数中传递带有可选方面的变量列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22543134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com