2017-09-15 66 views
0

我試圖做類似https://stackoverflow.com/a/29649406/15485,但我得到的錯誤geom_rect和GGPLOT2錯誤:美學必須是長度爲1或相同的數據(2)

Error: Aesthetics must be either length 1 or the same as the data (2): xmin, xmax, ymin, ymax, x, y

什麼「(2)」手段?

涉及什麼「美學」?我在ggplotaesaesgeom_rect,但我不知道如何解決這些問題的想法,我很害怕我永遠不會掌握ggplot ...

days<-rep(Sys.Date(),100)+seq(1,100) 
v<-sin(as.numeric(days)) 
df<-data.frame(days=days,v=v) 

shade <- data.frame(x1=c(as.Date('2017-10-15'),as.Date('2017-11-11')), 
        x2=c(as.Date('2017-10-20'),as.Date('2017-11-13')), 
        y1=c(-Inf,-Inf), y2=c(Inf,Inf)) 

library(ggplot2) 
plot(ggplot(df,aes(x=days,y=v)) 
    +geom_line() 
    +geom_rect(data=shade, 
       mapping=aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2), color='grey', alpha=0.2) 
    +geom_point()) 
+1

順便說一句,'(2)'意味着'data'的長度目前是2.也就是說,美學只允許爲1或2,如目前定義的那樣。 @ Z.Lin's顯示了爲什麼。 – Axeman

回答

2

geom_rect線試圖繼承默認美學頂線ggplot(df, aes(x = days, y = v))

下面將工作:

ggplot(df, aes(x=days, y=v)) + 
    geom_line() + 
    geom_rect(data=shade, inherit.aes = F, 
      aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2), 
      color = 'grey', alpha=0.2) + 
    geom_point() 

enter image description here

(我增加了更多的換行/空格到代碼更容易閱讀而且,沒有必要來包裝整個ggplot對象plot()。 )

+0

非常感謝!其實在https://stackoverflow.com/a/29649406/15485'geom_line'有它自己的'美學'和'ggplot'沒有。 –

+0

在RStudio中,我需要用'plot()'包裝,否則不會生成圖形... –

+0

@AlessandroJacopson這是因爲你的'+'運算符在下一行的開始,而不是在前一個的結尾。將它們移動(按照我的示例),您將看到圖形。 –

相關問題