2016-01-15 44 views
0

以下作品,它绘出基于数据的顺序上的一个数据的数据:自我简单的自定义绘图功能:错误:美学必须是长度为1或相同

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) 

有很多这样的数据,我想将它放在一个函数,这样我可以重复使用它,因为这样的:

plot1<-function(a, b, c){ 
    ggplot(a, aes(y=a$b, x=seq(1, length(a$b)))) + 
    geom_point()+ 
    geom_hline(yintercept =c) 
    } 

但是,下面不工作:

s<-data.frame(t=c(3, 50, 20, 100, 7, 80)) 
plot1(s, t, 10) 

相反,它产生此错误消息: 错误:美学必须是长度为1或相同的数据(6):X,Y

了什么问题?

+0

[这个讨论](http://stackoverflow.com/questions/5106782/use-of-ggplot-within-another-function- in-r)可能会帮助你。 –

回答

4

请勿在aes之内使用$。它看起来在为使用非标准评估的变量指定为data的data.frame内。如果您使用$,则可能会收到意想不到的结果。

我不知道在aes中使用$的任何ggplot2示例。

在这里,您可以使用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) 

resulting plot

+0

工作。谢谢。 – sstww

相关问题