2012-04-26 14 views
23

Mentre produco grafici utilizzando ggplot2, ho alcuni nomi di legenda lunghi che desidero racchiudere su due righe. Per esempio:Testo della legenda di avvolgimento in ggplot2

a <- (1:10) 
b <- c(1,1.5,2,4,5,5.3,7,9,9.5,9.8) 
places = c("Birmingham","Chester-le-street","Cambridge", "Newcastle-upon-Tyne","Peterborough","Cambridge", "Newcastle-upon-Tyne","Peterborough","Liverpool","Stratford-upon-Avon") 
df1 = data.frame(a,b,places) 
library(ggplot2) 
i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3) + opts(legend.position="bottom") 

Come potrei fare per avvolgere gli elementi della legenda quando la casella è impostato per essere in fondo - dice in 2 o 3 linee? Al momento i sette elementi della leggenda sono uno accanto all'altro. Preferirei che venissero visualizzati su due file (ad esempio quattro città nella fila superiore e tre città nella seconda fila).

Molte grazie in anticipo.

+0

Vorrei dividere la domanda in due domande separate. Uno dei quali sarebbe stato risposto dalla mia risposta (avvolgendo il testo come era evidente nella domanda originale) e un secondo per come creare legende multicolor con ggplot. PS: la posizione della legenda non dovrebbe cambiare molto per la risposta alla tua domanda). –

risposta

21

Ok, date le modifiche , probabilmente lo volevi:

library(scales) 
i + guides(colour = guide_legend(nrow = 2)) 

Ma potresti trovare che vuoi comunque impiegare anche la tecnica del wrapping del testo, per adattarla.

+0

Oltre a 'colour', questo funziona anche per altre estetiche come' guides (linetype = guide_legend (nrow = 2)) '. –

20

Dal tuo esempio:

df1$places<-sub("-", "- \n ", df1$places) 

i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3) 

enter image description here

Note: - È possibile utilizzare gsub per sostituire tutti i "-" con "- \ n"

+0

Grazie aEtienne Low-Décarie, ma questo non è proprio quello che voglio. Voglio ancora la legenda sul fondo, ma il testo della legenda è molto lungo. Quindi, invece delle 7 etichette su una lunga fila, le voglio su due righe (mantenendo il grafico di una forma simile a come è nell'esempio). –

+0

@KatieT È necessario essere più chiari sul fatto che si desideri racchiudere le _text labels_ nella legenda su 2 righe o gli _legend items_ stessi o entrambi. La tua domanda ha solo menzionato il termine "legenda dei nomi", che è ciò a cui questa risposta si rivolge. – joran

+1

Sai come farlo con il titolo della leggenda? –

Problemi correlati