2013-08-24 13 views
5

Sto cercando di creare una leggenda che avrebbe prende etichette personalizzate e colori, alfa corrispondenti alle aree evidenziate in una trama ragionata e non la serie di dati tracciati nel diagramma utilizzando il codice:Creazione di leggende personalizzate 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 

dove vorrei aggiungere una legenda con etichette che dicano "anni '70", "anni '90" con i corrispondenti colori rosso e verde con alfa di 0,2 corrispondenti agli elementi annotati. C'è un modo per farlo?

risposta

11

Il più semplice sarebbe creare un nuovo frame di dati per le regioni che dovrebbero essere annotate.

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")) 

Quindi utilizzare geom_rect() e questo nuovo frame di dati per aggiungere tali regioni. La leggenda verrà eseguita automaticamente. Con scale_fill_manual() puoi cambiare i colori.

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

Fantastic. Funziona bene! – user2699676

+1

appena adattato a segmenti, funziona magia! Liels paldies, Didzi! –