使用ggplot2的简单自定义绘图功能:错误:美学长度必须为1或与数据相同

sst*_*tww 0 r ggplot2

下面的工作,它根据数据的顺序绘制一列数据:

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

什么地方出了错?

Rol*_*and 5

不要$在内使用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)

结果图