2013-03-03 7 views
9

Come posso ottenere una singola legenda che acquisisca sia il colore che la dimensione?ggplot2: una legenda con due proprietà visive derivate dalla variabile comune

Ho avuto l'impressione che una legenda comune sia l'impostazione predefinita se si utilizza una variabile comune, ma l'esempio seguente mostra che mi manca qualcosa.

library(ggplot2) 

input <- as.data.frame(matrix(runif(60),nrow=20,ncol=3)) 
colnames(input) <- c("A","B","C") 

p <- ggplot(input,aes(A,B,size=C,color=C)) + geom_point() 

enter image description here

Grazie ad Arun per un commento che ha spinto questa modifica. Quindi, se si usa solo la dimensione (e si dimentica il colore) si ottiene una legenda che rappresenta tre dimensioni, ma nella trama sono rappresentate molte più dimensioni.

enter image description here

Quindi quello che sarebbe dopo è un comportamento simile - una leggenda che mostra alcuni valori della variabile comune e rappresenta le dimensioni e colori corrispondenti.

+2

ti sembra di essere tramando l'estetica '' size' e color' come attributo continuo ('C' non è un' factor'). Come puoi combinare la leggenda quando non è discreta? prova 'ggplot (input, aes (A, B)) + geom_point (aes (size = factor (C), color = factor (C)))' (vedrai un'enorme leggenda combinata) – Arun

+0

Grazie a @Arun. Le dimensioni e il colore sono entrambi continui. Apprezzo che la dimensione non possa avere una rappresentazione di legenda continua, e ho pensato che sarebbe bastata campionare la dimensione a intervalli, il che potrebbe consentire a dimensioni diverse di apparire nella trama che solo quelli nella legenda. –

+0

@Arun: dopo tutto, lo fa già per le dimensioni: la legenda non mostra tutte le dimensioni che appaiono nel grafico. È irragionevole desiderare che un sottoinsieme della variabile comune appaia nella legenda, raffigurato con il colore e la dimensione corrispondenti? –

risposta

9

Il colorbar non può essere fusa, ma una leggenda normale possibile,

p + guides(colour = guide_legend()) 
+0

Proprio quello di cui avevo bisogno, grazie. –

+0

Con la tua soluzione, qual è il modo più semplice per modificare il titolo della nuova legenda unita? –

+0

Ho trovato un modo con scale_size_continuous ("nuovo titolo") e scale_colour_continuous ("nuovo titolo") prima di quanto sopra, ma non sono sicuro che le due linee siano necessarie. –

0

avevo bisogno di fare le etichette per dimensioni e il colore stesso, e assicurarsi che si sta lavorando con le stesse informazioni in combinazione con la linea di guide .

p+geom_jitter(data=df, aes(x=x, y=y, color=value, size = value)) 
+scale_size_continuous(name = "Legend Name", breaks= c(.25, .50,.75), labels=c(".25",".50",".75"))+scale_colour_gradient(name = "Legend Name", breaks= c(.25, .50,.75), labels=c(".25", ".50",".75"))+ 
guides(colour = guide_legend()) 
Problemi correlati