2013-08-24 20 views
5

Próbuję stworzyć legendę, która zaczyna niestandardowych etykiet i kolory, Alfy odpowiadające wyróżnionych regionów w adnotacjami działki, a nie seria danych kreślone na wykresie przy użyciu kodu:Tworzenie niestandardowych legendy w 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 

gdzie chciałbym dodać legendę z etykietami mówiącymi "lata siedemdziesiąte", "lata dziewięćdziesiąte" z odpowiednimi kolorami czerwonymi i zielonymi z alfa o wartości 0,2 odpowiadającej elementom opisowym. Czy jest sposób na zrobienie tego?

Odpowiedz

11

Najprościej byłoby stworzyć nową ramkę danych dla regionów, które powinny być opatrzone adnotacjami.

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

Następnie użyj geom_rect() i tę nową ramkę danych, aby dodać te regiony. Legenda zostanie wykonana automatycznie. Za pomocą scale_fill_manual() możesz zmieniać kolory.

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. To działa jako uczta! – user2699676

+1

właśnie dostosował go do segmentów, działa magicznie! Liels paldies, Didzi! –