2012-08-09 15 views
10

Al leer artículos científicos, a menudo me encuentro con tramas donde los puntos se agitan sin superponerse entre sí. Sospecho que muchos de ellos están dibujados con un programa llamado GraphPad Prism, pero seguramente debe haber una manera de hacer lo mismo en R. Aunque no es perfecto (como con los puntos rojos a continuación), creo que se ve mucho mejor que el alboroto aleatorio.Evitar la superposición cuando se agitan los puntos

Jittered points without overlap

Si alguien sabe cómo hacer esto, preferiblemente usando alguna función básica, estaría muy feliz de saber.

+4

esto a menudo se llama una trama beeswarm * *; hay algunas funciones en las versiones más nuevas de ggplot2 que hacen esto –

+1

Ah, es bueno ponerle un nombre. Hace que sea mucho más fácil descubrir más. No estoy tan familiarizado con ggplot (siempre preferido celosía), pero supongo que siempre podría utilizar una función general de ingeniería inversa. Parece que hay un paquete llamado [beeswarm] (http://cran.r-project.org/web/packages/beeswarm/index.html) en CRAN que también lo hace. – Backlin

+1

Paquete relevante para ggplot: https://github.com/eclarke/ggbeeswarm –

Respuesta

13

Aquí es una solución ggplot2 usando geom_dotplot():

library(ggplot2) 
set.seed(1234) 

dat = data.frame(y=c(rpois(20, 4), rpois(20, 1), runif(20, 0, 20)), 
       category=rep(c("group_1", "group_2", "group_3"), c(20, 20, 20))) 

dotplot_1 = ggplot(dat, aes(x=category, y=y)) + 
      geom_dotplot(aes(fill=category), binaxis="y", 
         stackdir="center", binwidth=0.8) + 
      stat_summary(fun.y=median, fun.ymin=median, fun.ymax=median, 
         geom="crossbar", width=0.7) 

ggsave("dotplot_1.png", dotplot_1, width=6, height=4) 

enter image description here

+0

Gracias, se ve bien! Y bastante simple también, podría incluso curar mi confusión inicial sobre ggplot2 :) Me quedaré un rato pensando, para ver si alguien sabe cómo hacerlo en celosía o gráficos de base. – Backlin

+0

Realicé el [paquete beeswarm] (http://cran.r-project.org/web/packages/beeswarm/index.html) Mencioné anteriormente el uso del sistema de gráficos estándar, así que ya tengo dos buenas maneras de lograrlo . – Backlin

+0

Para ajustar el tamaño de los puntos de datos, agregue una opción de tamaño de mapa a geom_dotplot() – wint3rschlaefer

Cuestiones relacionadas