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

时间:2022-03-16 16:12:10

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)

使用ggplot2的简单自定义绘图功能:错误:美观必须是长度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)

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