2013-08-24 15 views
5

Ich versuche, eine Legende zu schaffen, würde benutzerdefinierte Etiketten und Farben, Alphas markierte Bereiche entsprechend in einer kommentierten Handlung und nicht die Datenreihe aufgetragen in dem Diagramm mit dem Code nimmt:Erstellen von benutzerdefinierten Legenden in ggplot2

library(ggplot2) 
data(economics) 
p1 <- ggplot(data=economics, mapping=aes(x=date, y=unemploy)) + 
    geom_line(size=1) + 
    annotate("rect", xmin=as.Date('1970-01-01'), xmax=as.Date('1980-01-01'), ymin=-Inf, ymax=Inf, alpha=0.2, fill="red") + 
    annotate("rect", xmin=as.Date('1990-01-01'), xmax=as.Date('2000-01-01'), ymin=-Inf, ymax=Inf, alpha=0.2, fill="green") + 
p1 

wo würde ich gerne eine Legende mit Etiketten sagen "1970s", "1990er Jahre" mit den entsprechenden Farben rot und grün mit Alphas von 0,2 entsprechend den Anmerkungen Elemente hinzufügen. Gibt es eine Möglichkeit, dies zu tun?

Antwort

11

Am einfachsten wäre es, einen neuen Datenrahmen für Regionen zu erstellen, die kommentiert werden sollen.

df<-data.frame(xmin=as.Date(c('1970-01-01','1990-01-01')), 
       xmax=as.Date(c('1980-01-01','2000-01-01')), 
       ymin=c(-Inf,-Inf), 
       ymax=c(Inf,Inf), 
       years=c("1970s","1990s")) 

Dann geom_rect() und diesen neuen Datenrahmen verwenden, um diese Regionen hinzuzufügen. Die Legende wird automatisch erstellt. Mit scale_fill_manual() können Sie Farben ändern.

ggplot(data=economics, mapping=aes(x=date, y=unemploy)) + 
    geom_line(size=1)+ 
    geom_rect(data=df,aes(xmin=xmin,ymin=ymin,xmax=xmax,ymax=ymax,fill=years), 
        alpha=0.2,inherit.aes=FALSE)+ 
    scale_fill_manual(values=c("red","green")) 

enter image description here

+2

Fantastisch. Das funktioniert gut! – user2699676

+1

nur angepasst, um Segmente, funktioniert Magie! Liels Pardis, Didzi! –

Verwandte Themen