Pregunta sobre r, ggplot2 – Ajustar texto de leyenda en ggplot2

27

Mientras produzco gráficos usando ggplot2, tengo algunos nombres de leyendas largas que deseo encerrar en dos líneas. Por ejemplo:

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

¿Cómo haría para envolver los elementos de la leyenda cuando el cuadro esté en la parte inferior, por ejemplo, en 2 o 3 líneas? En este momento los siete elementos de la leyenda están uno junto al otro. Preferiría que se muestren en dos filas (con, por ejemplo, cuatro ciudades en la fila superior y tres ciudades en la segunda fila).

Muchas gracias de antemano.

Yo dividiría su pregunta en dos preguntas separadas. Uno de los cuales sería respondido por mi respuesta (envolviendo el texto como fue aparente en la pregunta original) y otro sobre cómo crear leyendas de varias columnas con ggplot. PD: la ubicación de la leyenda no debería cambiar mucho por la respuesta a su pregunta). Etienne Low-Décarie

Tu respuesta

2   la respuesta
27

Ok, dadas tus ediciones, probablemente quisiste esto:

<code>library(scales)
i + guides(colour = guide_legend(nrow = 2))
</code>

Pero es posible que también desees emplear la técnica de ajuste de texto para que encaje.

Ademáscolour, esto también funciona para otras estéticas comoguides(linetype=guide_legend(nrow=2)). Paul Rougieux
20

De tu ejemplo:

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

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

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

Gracias, @Etienne Low-Décarie, pero esto no es exactamente lo que quiero. Todavía quiero la leyenda en la parte inferior, pero el texto de la leyenda es muy largo. Así que en lugar de las 7 etiquetas en una fila larga, las quiero en dos filas (manteniendo el gráfico en una forma similar a la de tu ejemplo). KT_1
¿Sabes cómo hacer esto con el título de la leyenda? user1685185
@KatieT Debe ser más claro si desea ajustar eletiquetas de texto en la leyenda a través de 2 líneas, o laelementos de leyenda ellos mismos, o ambos. Cuestiona solo mencionar el ajuste de los 'nombres de leyenda', que es a lo que se dirige esta respuesta. joran

Preguntas relacionadas