2012-04-26 29 views
23

Mientras produzco gráficos usando ggplot2, tengo algunos nombres largos de leyenda que deseo envolver en dos líneas. Por ejemplo:Ajustar el texto de la leyenda en 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") 

¿Cómo hago para envolver los elementos de leyenda cuando la caja está dispuesto a ser en la parte inferior - por ejemplo en 2 o 3 líneas? Por el momento, los siete elementos de la leyenda están uno al lado del otro. Preferiría que se muestren en dos filas (por ejemplo, cuatro ciudades en la fila superior y tres ciudades en la segunda fila).

Muchas gracias de antemano.

+0

Yo dividiría su pregunta en dos preguntas separadas. Una de ellas sería respondida por mi respuesta (envolviendo el texto como era aparente en la pregunta original) y una segunda por cómo crear leyendas de múltiples columnas con ggplot. PD: la ubicación de la leyenda no debería cambiar mucho para la respuesta a su pregunta). –

Respuesta

21

bien, dadas sus ediciones , probablemente haya querido esto:

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

Pero puede encontrar que todavía desea emplear la técnica de envoltura de texto, para que encaje.

+0

Además de 'colour', esto también funciona para otras estéticas como' guides (linetype = guide_legend (nrow = 2)) '. –

20

de su ejemplo:

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

Notas: - Se puede usar gsub para reemplazar todos los "-" con "- \ n"

+0

Gracias a @Etienne Low-Décarie, pero esto no es exactamente lo que quiero. Todavía quiero la leyenda en el fondo, pero el texto de la leyenda es muy largo. Entonces, en lugar de las 7 etiquetas en una fila larga, las quiero en dos filas (manteniendo el gráfico de forma similar a como está en su ejemplo). –

+0

@KatieT Debe tener más claro si desea envolver las _text labels_ en la leyenda en 2 líneas, o los _legend items_ en sí mismos, o en ambos. Su pregunta solo menciona el ajuste de los "nombres de leyenda", que es a lo que responde esta respuesta. – joran

+1

¿Sabes cómo hacer esto con el título de la leyenda? –

Cuestiones relacionadas