Pregunta ¿Cómo hacer jitter texto para evitar la superposición en un diagrama de dispersión ggplot2?


Me gustaría crear una versión limpia de un diagrama de dispersión de etiquetas de texto en ggplot2. El objetivo es representar visualmente los valores crecientes asociados con alrededor de 25 elementos. Ya estoy usando "position_jitter", pero me pregunto si puedo hacerlo mejor.

Aquí hay algunos datos falsos:

title <- rep("A Really Rather Long Text Label", 25)
value <- runif(25, 1,10)
spacing <- seq(1:25)
df <- data.frame(title, value, spacing, stringsAsFactors = FALSE)

Y aquí está el código que genera el gráfico:

library(ggplot2)
myplot <- ggplot(data=df, aes(x=spacing, y=value, label = title)) +
geom_text(aes(colour = value),
    size = 2.5, fontface = "bold",
    vjust = 0,
    position = position_jitter(width=5, height=0)) +
theme_bw() +
scale_x_continuous(limits = c(-5, 30))+
scale_colour_gradient(low = "#6BAED6", high = "#08306B") +
theme(axis.title.x = element_blank(),
      axis.ticks = element_blank(),
      axis.text.x = element_blank(),
      legend.position = "none")
myplot

Hay un montón de espacio para todo este texto en un gráfico de tamaño razonable, ¡siempre que el texto se pueda desplazar libremente tanto como lo necesite horizontalmente! No quiero fluctuar verticalmente, porque el objetivo es mostrar el valor y asociado a cada etiqueta de texto.

El gráfico sale ligeramente diferente cada vez que ejecuta el comando ggplot, y a veces los resultados de fluctuación son mejores que otros. Pero no he encontrado una manera de evitar sistemáticamente que las etiquetas se superpongan.

Agradecería cualquier sugerencia sobre cómo limpiar el posicionamiento horizontal del texto sin tener que mover elementos individuales manualmente. También me gustaría escuchar otros consejos sobre cómo mejorar este tipo de representación visual.


35
2018-06-25 21:22


origen


Respuestas:


Eche un vistazo al FField paquete

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()

(de esta publicación https://stats.stackexchange.com/a/62856)


5
2017-11-18 18:54