2012-07-27 10 views
6

È possibile avere due legende con ggplot2 ma basate su set di dati diversi? Ad esempio, nel codice qui sotto vorrei ottenere sia la leggenda della prima situazione che la leggenda della seconda situazione nella stessa immagine. Il mio tentativo (terza situazione) non funziona.due legende basate su dataset diversi con 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

Il codice dovrebbe idealmente essere facile da tagliare e incollare in R. Come al momento hai '>' e '+' caratteri che non lo rendono possibile. Difficile vedere cosa stai facendo di conseguenza. –

+0

@ mindless.panda Questo non è un problema: copia il codice e poi fai "Incolla solo i comandi" nella console R :-) –

+0

Si presume che tutti utilizzino la console R standard. =) –

risposta

13

In generale, una volta che iniziare a ricevere a trame più complesse, la sua quasi sempre meglio a smettere di usare qplot e utilizzare ggplot invece. Trovo più facile pensare a come sto costruendo la trama fino pezzo per pezzo:

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

Questo dà:

plot

Problemi correlati