Tengo un problema al envolver textos largos en ggplot2. Se hizo una pregunta similar aquí ggplot2 ¿Existe una manera fácil de ajustar el texto de la anotación?

Mi pregunta es si tenemos el texto así.

my_label <- "Some_arbitrarily_larger_text"

¿Cómo podemos encogerlo usando el mismo método?

wrapper <- function(x, ...) paste(strwrap(x, ...), collapse = "\n")

library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()+
annotate("text", x = 4, y = 25, label = wrapper(my_label, width = 5))

enter image description here

¡Parece que no funciona para este caso!

5
Alexander 23 nov. 2017 a las 04:26

2 respuestas

La mejor respuesta

Use un espacio Unicode de ancho cero y sustituya todos los _ por _ + it:

library(stringi)
library(ggplot2)

my_label <- "Some_arbitrarily_larger_text"
my_label <- stri_replace_all_fixed(my_label, "_", "_\U200B")

A simple vista es continua:

my_label
## [1] "Some_​arbitrarily_​larger_​text"

Pero, programáticamente, es una oportunidad para romper / ajustar palabras:

wrapper <- function(x, ...) paste(stri_wrap(x, ...), collapse = "\n")

ggplot(mtcars, aes(x = wt, y = mpg)) + 
  geom_point() +
  annotate("text", x = 4, y = 25, label = wrapper(my_label, width = 5))

enter image description here

3
hrbrmstr 23 nov. 2017 a las 02:50

También puede llamar a stringr::str_wrap(), para:

library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()+
  annotate("text", x = 4, y = 25, label = stringr::str_wrap(my_label, 5))

Sin embargo, no creo que ninguno de esos separe una sola palabra, si eso es lo que estás buscando.

7
edavidaja 23 nov. 2017 a las 02:01