Ajuste automático de tags mediante etiqueta = etiqueta_envuelta en ggplot2

Me gustaría ajustar automáticamente mis tags en ggplot2. Aquí está escrito cómo escribir una función (1) para ello, pero lamentablemente no sé dónde poner labeller=label_wrap en mi código (2).

(1) función por hadley

 label_wrap <- function(variable, value) { lapply(strwrap(as.character(value), width=25, simplify=FALSE), paste, collapse="\n") } 

(2) ejemplo de código

 df = data.frame(x = c("label", "long label", "very, very long label"), y = c(10, 15, 20)) ggplot(df, aes(x, y)) + geom_bar(stat="identity") 

Histograma con etiqueta larga no envuelta

Me gustaría envolver algunas de las tags más largas aquí.

No necesita la función label_wrap . En su lugar, use la función stringr paquete stringr .

No proporciona su dataframe df , por lo que creo un dataframe simple, uno que contiene sus tags. Luego, aplique la función str_wrap a las tags.

 library(ggplot2) library(stringr) df = data.frame(x = c("label", "long label", "very, very long label"), y = c(10, 15, 20)) df df$newx = str_wrap(df$x, width = 10) df 

Ahora, para aplicar las tags a un gráfico ggplot: el primer gráfico usa las tags originales; el segundo gráfico usa las tags modificadas; y para el tercer gráfico, las tags se modifican en la llamada a ggplot.

 ggplot(df, aes(x, y)) + xlab("") + ylab("Number of Participants") + geom_bar(stat = "identity") ggplot(df, aes(newx, y)) + xlab("") + ylab("Number of Participants") + geom_bar(stat = "identity") ggplot(df, aes(x, y)) + xlab("") + ylab("Number of Participants") + geom_bar(stat = "identity") + scale_x_discrete(labels = function(x) str_wrap(x, width = 10)) 

enter image description here

Aquí hay otra forma sin referencia a la biblioteca stringr :

 ggplot(df, aes(x, y)) + xlab("") + ylab("Number of Participants") + geom_bar(stat = "identity") + scale_x_discrete(labels = function(x) lapply(strwrap(x, width = 10, simplify = FALSE), paste, collapse="\n")) 

donde la llamada:

 lapply(strwrap(x, width = 10, simplify = FALSE), paste, collapse="\n") 

hace el trabajo de dividir las tags de forma dinámica. El resultado es el mismo que en la primera respuesta .

El paquete “escalas” incluye una función muy similar a la de Claude y Leonardo: wrap_format.

 library(scales) ggplot(df, aes(x, y)) + geom_bar(stat = "identity") + labs(x = "", y = "Number of Participants") + scale_x_discrete(labels = wrap_format(10)) 

(Afortunadamente) mejorando la respuesta de @ Claude:

 get_wraper <- function(width) { function(x) { lapply(strwrap(x, width = width, simplify = FALSE), paste, collapse="\n") } } ggplot(df, aes(x, y)) + geom_bar(stat = "identity") + labs(x = "", y = "Number of Participants") + scale_x_discrete(labels = get_wraper(10))