下面的工作,它根据数据的顺序绘制一列数据:
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)
Run Code Online (Sandbox Code Playgroud)
因为我有很多这样的数据,所以我想将其放在一个函数中以便可以重用,如下所示:
plot1<-function(a, b, c){
ggplot(a, aes(y=a$b, x=seq(1, length(a$b)))) +
geom_point()+
geom_hline(yintercept =c)
}
Run Code Online (Sandbox Code Playgroud)
但是,以下操作无效:
s<-data.frame(t=c(3, 50, 20, 100, 7, 80))
plot1(s, t, 10)
Run Code Online (Sandbox Code Playgroud)
而是,它产生以下错误消息:错误:美学必须为长度1或与数据(6)相同:x,y
什么地方出了错?
不要$
在内使用aes
。它data
使用非标准评估在为变量指定的data.frame中查找。如果使用,$
您会得到意想不到的结果。
我不知道$
在中使用的任何ggplot2示例aes
。
在这里您可以使用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)
Run Code Online (Sandbox Code Playgroud)