2017-09-15 3 views
0

Ich versuche, so etwas wie https://stackoverflow.com/a/29649406/15485 zu tun, aber ich habe den Fehlergeom_rect und ggplot2 Fehler: Ästhetik muss entweder Länge 1 oder die gleichen wie die Daten sein (2)

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

Was bedeutet ‚(2)‘ meint?

Was ist "Ästhetik"? Ich habe aes in ggplot und aes in geom_rect aber ich habe keine Ahnung, wie sie zu korrigieren ... Ich fürchte, ich werde nie ggplot fassen ...

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

Btw, das '(2)' bedeutet, dass die Länge der 'data' momentan 2 ist. Das heißt, die Ästhetik darf nur 1 oder 2 sein, wie derzeit definiert. @ Z.Lin zeigt warum. – Axeman

Antwort

2

Die geom_rect Linie wurde versucht, von Standard-Ästhetik zu erben die oberste Zeile ggplot(df, aes(x = days, y = v)).

Die folgende funktionieren würde:

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

(I mehr Zeilenumbrüche/Räume in den Code für das Lesen zu vereinfachen hinzugefügt Außerdem gibt es keine Notwendigkeit, das ganze ggplot Objekt in plot() zu wickeln..)

+0

Vielen Dank! Tatsächlich hat 'geom_line' in https://stackoverflow.com/a/29649406/15485 eine eigene'Asthetik' und' ggplot' hat keine. –

+0

In RStudio muss ich mit 'plot()' umschließen, sonst wird kein Graph erzeugt ... –

+0

@AlessandroJacopson Das liegt daran, dass Ihre '+' Operatoren am Anfang der nächsten Zeile stehen und nicht am Ende des vorherigen. Verschiebe sie (wie in meinem Beispiel) und du wirst das Diagramm sehen. –

Verwandte Themen