¿Cómo evito superponer etiquetas en un gráfico R? [cerrado]

44

Estoy tratando de etiquetar un diagrama de dispersión bastante simple en R. Esto es lo que uso:

plot(SI, TI)
text(SI, TI, Name, pos=4, cex=0.7)

El resultado es mediocre, como puede ver (haga clic para ampliar):

ingrese la descripción de la imagen aquí

Traté de compensar esto usando la textxyfunción, pero no es mejor . Hacer que la imagen en sí sea más grande no funciona para los grupos densos.

¿Hay alguna función o forma fácil de compensar esto y dejar que R tracen las etiquetas que no se superponen ?


Aquí hay un pequeño subconjunto de los datos que tengo:

Name;SI;TI
01_BAD_talking_head;6.944714;4.421208
01_GOOD_talking_head;5.680141;4.864035
01_GOOD_talking_head_subtitles;7.170114;4.664205
slhck
fuente
1
Publiqué una pregunta similar aquí , eche un vistazo a las respuestas allí ...
Curioso
3
¡Encontré una solución ! ¡Le identify()permite decidir manualmente dónde colocar la etiqueta! No es ideal, pero de las soluciones propuestas esto funciona mejor para mí.
Curioso

Respuestas:

29

Echa un vistazo al nuevo paquete ggrepel . ggrepel proporciona geoms para que ggplot2 repele las etiquetas de texto superpuestas. Funciona tanto para geom_text como geom_label.

ingrese la descripción de la imagen aquí

La figura está tomada de esta publicación de blog .

Sukhdeep Singh
fuente
19

El directlabelspaquete hace eso. Desde su página web :

Este paquete es un intento de hacer que el etiquetado directo sea una realidad en la práctica estadística diaria al poner a disposición un conjunto de funciones útiles que hacen que el etiquetado directo de trazados comunes sea fácil de hacer con sistemas de trazado de alto nivel como la red y ggplot2.

Sin embargo, no siempre es posible para parcelas densas.

Aquí hay un breve ejemplo:

set.seed(123)
a <- c(rnorm(10,-3,2),rnorm(10,3,2))
b <- c(rnorm(10,-3,2),rnorm(10,3,2))
dfr <- data.frame(a,b)
dfr$t <- c(paste("A",1:10,sep=""),paste("B",1:10,sep=""))
direct.label(xyplot(b~a,dfr,groups=t, col="black"))

Me las arreglé para deshacerme de la coloración de puntos col="black", pero no las etiquetas.

Laurent
fuente
1
Tengo problemas para que funcione. ¿Podría tal vez proporcionar un ejemplo de trabajo simple?
slhck
1
En su caso, algo así direct.label(xyplot(SI~TI,data=yourDataFrame,group=Name))debería obtener un resultado similar.
Laurent
Perfecto. Esto es lo que terminé usando su último ejemplo simple. Las etiquetas y los puntos de color son realmente muy bonitos, ya que sabes a dónde pertenecen las etiquetas.
slhck
1
Tuve que usar library(lattice)para ir xyplota trabajar.
David J. Harris
14

Te sugiero que eches un vistazo al wordcloudpaquete. Sé que este paquete no se enfoca exactamente en los puntos sino en las etiquetas mismas, y también el estilo parece ser bastante fijo. Pero aún así, los resultados que obtuve al usarlo fueron bastante impresionantes. También tenga en cuenta que la versión del paquete en cuestión se lanzó sobre el momento en que hizo la pregunta, por lo que todavía es muy nueva.

http://blog.fellstat.com/?cat=11

salida textplot ()

comandante
fuente
9

Me encontré con un problema similar con varias de las parcelas con las que he estado trabajando y escribí un paquete básico que usa la simulación de campo de fuerza para ajustar las ubicaciones de los objetos. La ventaja sobre algunas de las soluciones mencionadas anteriormente es el ajuste dinámico para la proximidad relativa del objeto en 2D. Si bien es posible realizar muchas mejoras, incluidas la heurística y la integración con ggplot, etc., parece que se logra la tarea. Lo siguiente ilustra la funcionalidad:

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

Por ahora no hay heurística para una variedad de áreas y distribuciones de puntos, ya que la solución satisfizo mis necesidades y quería obtener algo útil para la gente rápidamente, pero las agregaré en el mediano plazo. En este momento, recomiendo escalar gráficos a 100x100 y viceversa y ajustar ligeramente los parámetros predeterminados de atracción y repulsión según lo justifique.

Gregk
fuente
8

En el caso de que simplemente no pueda hacer que las etiquetas funcionen correctamente como lo produjo R, tenga en cuenta que siempre puede guardar los gráficos en un formato vectorial (como .pdf) y colocarlos en un programa de edición como InkScape o Adobe Illustrator.

Fomite
fuente
8

Un par de herramientas adicionales para mirar en R:

Estos no harán todo por usted, pero uno de ellos puede ser parte de una solución.

Greg Snow
fuente