2012-08-23 16 views
7

Estoy usando ggplot para trazar algunos datos y noté que el texto de las leyendas es muy largo y no se ajusta a la ventana.envolver el texto de la leyenda para que se ajuste a la ventana del gráfico

+ opts(legend.position = 'bottom', legend.direction = 'horizontal', size=0.1) + 
    guides(colour = guide_legend(nrow = 3), size=1) 

Hay una opción en ggplot para ajustar el texto de la leyenda para que se ajuste a la ventana.

+2

buena pregunta: un ejemplo * reproducible podría acelerar las respuestas ... –

+2

Difícil publicar una respuesta sin datos. Pero AFAIK no hay opción en 'ggplot2', pero puede escribir una función para insertar' \ n' después de cierta longitud. –

Respuesta

7

No sé, por lo que he recurrido a una solución usando strwidth(), que calcula el ancho del texto en gráficos base.

title <- "This is a really excessively wide title for a plot, especially since it probably won't fit" 

Uso par("din") to get the width of the device, and strwidth() `para calcular el tamaño del texto:

par("din")[1] 
[1] 8.819444 
strwidth(title, units="inches") 
[1] 11.47222 

utilizarlo en una función y la trama:

wrapTitle <- function(x, width=par("din")[1]){ 
    xx <- strwrap(x, width=0.8 * nchar(x) * width/strwidth(x, units="inches")) 
    paste(xx, collapse="\n") 
} 

wrapTitle(title) 
[1] "This is a really excessively wide title for a plot, especially since it\nprobably won't fit, meaning we somehow have to wrap it" 

La trama:

ggplot(mtcars, aes(wt, mpg)) + geom_point() + opts(title=wrapTitle(title)) 

enter image description here


Si desea guardar la trama en un archivo, entonces se puede sustituir par("din") con las dimensiones reales de la trama guardadas.

+0

Me gusta su enfoque, sin embargo, como entiendo, el OP quiere envolver el texto de la leyenda, no el título o título de la leyenda. ¿Hay alguna forma de conocer las dimensiones del grob donde se encuentra el texto de la leyenda? –

+0

@Iselzer Ahah, no estaba prestando suficiente atención ... – Andrie

Cuestiones relacionadas