2012-01-29 19 views
12

Considere el siguiente gráfico ggplot2 con el texto de faceta/tira larga dividido en dos líneas. El texto sale del área dedicada a títulos de facetas.ggplot2: dividir el texto de faceta/tira en dos líneas

library(ggplot2) 
x <- c(1:3, 1:3) 
y <- c(3:1, 1:3) 
grp <- c(0, 0, 0, 1, 1, 1) 
p <- qplot(x=x, y=y) + geom_line() + facet_wrap(~ grp) 
grob <- ggplotGrob(p) 
strip.elem.y <- grid.ls(getGrob(grob, "strip.text.x", 
       grep=TRUE, global=TRUE))$name 
grob <- geditGrob(grob, strip.elem.y[1], 
     label="First line and\n second line") 
grid.draw(grob) 

¿Hay alguna manera de aumentar la altura del área de texto de la tira?

+1

Puede usar la función 'str_wrap' de' stringr' dentro de una 'transform'. Consulte [Respuesta de Ista] (https://groups.google.com/forum/#!topic/ggplot2/0iODapyt2Pc) para obtener más información. –

Respuesta

6

yo probamos este una variedad de maneras, pero fue frustrado conseguir el paste(strwrap(text, width=40), collapse=" \n") que me diera los resultados para la sola fila de datos y no concatenar el que cada bit de texto de la lista completa.

Se me ocurrió una solución que funcionó mejor para mí. Escribí una función como la siguiente. Dada una trama de datos data con la columna text

wrapit <- function(text) { 
    wtext <- paste(strwrap(text,width=40),collapse=" \n ") 
    return(wtext) 
} 

data$wrapped_text <- llply(data$text, wrapit) 
data$wrapped_text <- unlist(data$wrapped_text) 

Después llamé a esta función, sólo apliqué mi función labeller a la columna de wrapped_text lugar de la columna text.

12

Se puede utilizar una etiqueta de 2 líneas:

grp <- c(rep("foo\nbar",3), 1, 1, 1) 
qplot(x=x, y=y) + geom_line() + facet_wrap(~ grp) 
2

ggplot2 admite una forma integrada de hacerlo utilizando label_wrap_gen.

x <- c(1:3, 1:3) 
y <- c(3:1, 1:3) 
grp = c(rep("group 1 with a long name",3),rep("group 2 with a long name",3)) 
d = data.frame(x = x, y =y, grp = grp) 
ggplot(d, aes(x=x,y=y)) + geom_line() + facet_wrap(~ grp, labeller = label_wrap_gen(width=10)) 
Cuestiones relacionadas