2012-04-03 8 views
28

Recentemente ho aggiornato a ggplot2 0.9.0 dalla versione 0.8.9, e ora ho capito che le legende della mia trama mostrano solo i livelli di fattore usati nella trama (omette quelli inutilizzati). Prima includeva tutti i livelli di fattore nella legenda. Sono in esecuzione Windows 7 e R 2.15.0 (2.14.2 prima di oggi).ggplot2 0.9.0 rilascia automaticamente livelli di fattore inutilizzati dalla legenda del diagramma?

Qualcun altro lo trova? C'è un modo per ottenere i livelli di fattore inutilizzati da visualizzare nella mia legenda trama?

library(ggplot2) 

df <- data.frame(fruit = rep(c("apple", "orange"), times=11), 
       year = 1990:2011, 
       qty = rnorm(22, 100, 20)) 

# This plot only gives "apple" in the legend now. 
# Before, I used to get both "apple" and "orange". 
qplot(year, qty, data = subset(df, fruit=="apple"), colour = fruit) 

Il qplot() utilizzato per darmi sia "mela" e "arancione" nella leggenda (anche se c'erano solo punti di "apple"). Ora ho solo "apple" nella legenda.

Motivo per cui è venuto fuori - Sto facendo molte trame di sottoinsiemi di un set di dati e voglio che le legende siano standardizzate su grafici (normalmente mi piacerebbe che i livelli non utilizzati venissero automaticamente rilasciati e non dover digitare droplevels(), ma questo è il caso in cui voglio quei livelli inutilizzati). Mi scuso se questa è una domanda solo per il mio computer.

risposta

32

Sì, si desidera aggiungere drop = FALSE alla scala di colori:

ggplot(subset(df,fruit == "apple"),aes(x = year,y = qty,colour = fruit)) + 
    geom_point() + 
    scale_colour_discrete(drop = FALSE) 
1

Un secondo modo è quello di definire in modo esplicito le voci necessarie utilizzando l'argomento limits:

ggplot(subset(df,fruit == "apple"),aes(x = year,y = qty,colour = fruit)) + 
    geom_point() + 
    scale_colour_discrete(limits = c("apple", "orange")) 
+1

Per alcune ragioni, questo ha funzionato per scale_color_manual() e drop = FALSE no – zer0hedge

Problemi correlati