2012-07-27 24 views
6

Czy można mieć dwie legendy z ggplot2, ale na podstawie różnych zestawów danych? Na przykład w poniższym kodzie chciałbym otrzymać zarówno legendę pierwszej sytuacji, jak i legendę drugiej sytuacji w tej samej grafice. Moja próba (trzecia sytuacja) nie działa.dwie legendy oparte na różnych zestawach danych z ggplot2

library(ggplot2) 
library(scales) 

yrng <- range(economics$unemploy) 
xrng <- range(economics$date) 
presidential <- presidential[-(1:3), ] 

# add a fictive factor to the economics dataset 
economics <- cbind.data.frame(economics, col=gl(2, nrow(economics)/2)) 

##################### 
## first situation ## 
##################### 
# first plot with legend 
unemp <- qplot(date, unemploy, data=economics, geom="line", 
       xlab = "", ylab = "No. unemployed (1000s)", colour=col) 
# second plot without legend 
unemp + geom_vline(aes(xintercept = start), data = presidential) 

###################### 
## second situation ## 
###################### 
# first plot without legend 
unemp <- qplot(date, unemploy, data=economics, geom="line", 
       xlab = "", ylab = "No. unemployed (1000s)") 
# second plot with legend 
unemp + 
    geom_rect(aes(NULL, NULL, xmin = start, xmax = end, 
        fill = party), ymin = yrng[1], ymax = yrng[2], 
        data = presidential) + 
    scale_fill_manual(values = alpha(c("blue", "red"), 0.2)) 


##################### 
## third situation ## 
##################### 
# first plot with legend 
unemp <- qplot(date, unemploy, data=economics, geom="line", 
       xlab = "", ylab = "No. unemployed (1000s)", colour=col) 
# second plot with legend 
unemp + 
    geom_rect(aes(NULL, NULL, xmin = start, xmax = end, fill = party), ymin = yrng[1], 
       ymax = yrng[2], data = presidential) + 
    scale_fill_manual(values = alpha(c("blue", "red"), 0.2)) 

Error in data.frame(xmin = 11342, xmax = 14264, fill = "Republican", colour = function (x, : 
    arguments imply differing number of rows: 1, 0 
+1

Twój kod powinien być idealnie łatwo wyciąć i wkleić do R. Jak obecnie masz znaki '>' i '+', które nie pozwalają na to. Trudno zobaczyć, co robisz w wyniku. –

+0

@ mindless.panda To nie jest problem: skopiuj kod, a następnie "Paste commands only" w konsoli R :-) –

+0

Zakładasz, że wszyscy używają standardowej konsoli R. =) –

Odpowiedz

13

Generalnie raz zaczynam coraz bardziej skomplikowanych wykresów, jego niemal zawsze lepiej, aby zaprzestać używania qplot i używać zamiast ggplot. I łatwiej myśleć o tym, w jaki sposób buduję fabułę się kawałek po kawałku:

ggplot() + 
    geom_line(aes(x=date, y=unemploy, color=col), data=economics) + 
    geom_rect(aes(xmin=start, xmax=end, fill=party), 
      ymin = yrng[1], ymax = yrng[2], data = presidential) + 
    scale_fill_manual(values = alpha(c("blue", "red"), 0.2)) +   
    xlab("") + 
    ylab("No. unemployed (1000s)") 

Daje:

plot

Powiązane problemy