The following works, it plots one column data based on the order of the data:
接下来的工作,它根据数据的顺序绘制一个列数据:
s<-data.frame(t=c(3, 50, 20, 100, 7, 80))
ggplot(s, aes(y=s$t, x=seq(1, length(s$t)))) +
geom_point()+
geom_hline(yintercept =10)
since I have many such data, I would like to put it in a function so that I can reuse it, as such:
因为我有很多这样的数据,所以我想把它放在一个函数中,这样我就可以重新使用它了。
plot1<-function(a, b, c){
ggplot(a, aes(y=a$b, x=seq(1, length(a$b)))) +
geom_point()+
geom_hline(yintercept =c)
}
However, the following does not work:
但是,以下方法不起作用:
s<-data.frame(t=c(3, 50, 20, 100, 7, 80))
plot1(s, t, 10)
Instead, it produced this error message: Error: Aesthetics must be either length 1 or the same as the data (6): x, y
相反,它产生了这个错误信息:错误:美学必须是长度1或与数据相同(6):x, y。
What went wrong?
到底是哪里出了错?
1 个解决方案
#1
4
Do not use $
within aes
. It looks within the data.frame specified as data
for the variables using non-standard evaluation. If you use $
you can get unexpected results.
不要在aes内使用$ $。它在data.frame中查找使用非标准评估的变量的数据。如果你使用$,你会得到意想不到的结果。
I don't know any ggplot2 examples that use $
within aes
.
我不知道在aes中使用$ $的任何ggplot2例子。
Here you can use aes_q
:
这里你可以使用aes_q:
plot1<-function(a, b, c){
a$x <- seq_len(nrow(a))
ggplot(a, aes_q(y=substitute(b), x=quote(x))) +
geom_point()+
geom_hline(yintercept = c)
}
plot1(s, t, 10)
#1
4
Do not use $
within aes
. It looks within the data.frame specified as data
for the variables using non-standard evaluation. If you use $
you can get unexpected results.
不要在aes内使用$ $。它在data.frame中查找使用非标准评估的变量的数据。如果你使用$,你会得到意想不到的结果。
I don't know any ggplot2 examples that use $
within aes
.
我不知道在aes中使用$ $的任何ggplot2例子。
Here you can use aes_q
:
这里你可以使用aes_q:
plot1<-function(a, b, c){
a$x <- seq_len(nrow(a))
ggplot(a, aes_q(y=substitute(b), x=quote(x))) +
geom_point()+
geom_hline(yintercept = c)
}
plot1(s, t, 10)