gpt4 book ai didi

r - 函数内的ggplot2变量

转载 作者:行者123 更新时间:2023-12-05 08:58:20 24 4
gpt4 key购买 nike

感觉我在这里犯了一个非常愚蠢的错误..因为我以前在另一个项目上做过这个(也许是运气?)

目标是通过使用函数在 ggplot 中构建多个图形。我最终希望所有图表都显示在一个页面上,等等...

这是一个有效的 ggplot 示例:

if (require("ggplot2") == FALSE) install.packages("ggplot2")

data_df = data.frame(matrix(rnorm(200), nrow=20))
time=1:nrow(data_df)

ggplot(data=data_df, aes(x=time, y=data_df[,1])) +
geom_point(alpha=1/4) +
ggtitle(deparse(substitute(data_df[1])))

请注意,还有其他函数将在此调用,这些函数将根据调用的数据框列而改变。我按照我所做的另一个工作示例进行操作,但这只会给我一个错误。我觉得我犯了一个低级错误,但我不能指责它!

if (require("ggplot2") == FALSE) install.packages("ggplot2")

data_df = data.frame(matrix(rnorm(200), nrow=20))
time=1:nrow(data_df)

graphit <- function(sample_num){
ggplot(data=data_df, aes(x=time, y=data_df[,sample_num])) +
geom_point(alpha=1/4) +
ggtitle(deparse(substitute(data_df[sample_num])))
}

graphit(1)

#Error in `[.data.frame`(data_df, , sample_num) :
# object 'sample_num' not found

感谢您的帮助。

最佳答案

你做错了几件事。

首先,aes() 中指定的所有内容都应该是数据框中的列。不要引用单独的向量,也不要通过 data_df[,1] 冗余调用列。指定 data = data_df 的全部要点是 aes() 中的所有内容都在 该数据帧中进行评估。

其次,要编写根据参数在不同列上创建 ggplot 的函数,您应该使用 aes_string 以便您可以将美学映射作为字符显式传递,并且避免非标准评估的问题。

同样,我不会依赖 deparse(substitute()) 作为情节标题。使用数据框中内置的一些其他变量,或其他一些数据结构。

例如,我会做更像这样的事情:

data_df = data.frame(matrix(rnorm(200), nrow=20))
time=1:nrow(data_df)
data_df$time <- time

graphit <- function(data,column){
ggplot(data=data, aes_string(x="time", y=column)) +
geom_point(alpha=1/4) +
ggtitle(column)
}

graphit(data_df,"X1")

关于r - 函数内的ggplot2变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24192000/

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