2016-01-15 42 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

相關問題