2012-06-25 22 views
35

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.¿Cómo jitter texto para evitar la superposición en un diagrama de dispersión ggplot2?

Aquí hay algunos datos simulacro:

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í es 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 todos este texto en un gráfico de tamaño razonable - ¡Siempre y cuando el texto sea libre de desplazarse 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 algunas veces los resultados de fluctuación son mejores que otros tiempos. 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.

+5

Casi un duplicado; como mínimo, puede encontrar que esta [pregunta] (http://stackoverflow.com/q/7611169/324364) es tan informativa como cualquier respuesta que obtenga aquí. – joran

+0

Gracias por el enlace; no lo habría encontrado a través de los términos que estaba buscando, y es útil saber cuándo no existe una solución automatizada fácil. Bajo esa pregunta anterior, usted hace un buen argumento para una solución manual. Con ese espíritu, aquí hay otra forma rápida (aunque limitada) de modificar la trama de PDF: abrir en Adobe Acrobat, elegir la herramienta "Editar texto de documento" y agregar espacios al comienzo de una etiqueta superpuesta. Esta ruta solo permite desplazar el texto seleccionado hacia la derecha, pero podría ser suficiente para alguien que no esté buscando una trama de calidad de publicación. – user1257313

+1

Bueno, también te indiqué a esa publicación porque tiene una lista bastante completa de funciones/paquetes que intentan hacerlo por ti. – joran

Respuesta

5

Tenga una mirada en el paquete de FField

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

(a partir de este post https://stats.stackexchange.com/a/62856)

Cuestiones relacionadas