2012-08-09 14 views
10

Durante la lettura di articoli scientifici, spesso mi capita di imbattermi in trame in cui i punti sono agitati senza sovrapporsi l'un l'altro. Sospetto che molti di essi siano disegnati con un programma chiamato GraphPad Prism, ma sicuramente ci deve essere un modo per fare lo stesso in R. Anche se non è perfetto (come con i punti rossi sotto) penso che sia molto meglio di un jitter a caso.Evitare sovrapposizioni quando si agitano i punti

Jittered points without overlap

Se qualcuno sa come farlo, preferibilmente utilizzando alcune funzioni di base, sarei molto felice di sapere.

+4

questo è spesso chiamato un * beeswarm plot *; ci sono alcune funzioni nelle nuove versioni di ggplot2 che fanno questo –

+1

Ah, bello avere un nome su di esso. Rende molto più facile scoprirne di più. Non sono così familiare con ggplot (sempre preferito reticolo), ma suppongo che potrei sempre decodificare una funzione generale per questo. Sembra esserci un pacchetto chiamato [beeswarm] (http://cran.r-project.org/web/packages/beeswarm/index.html) in CRAN che lo fa anche. – Backlin

+1

Pacchetto pertinente per ggplot: https://github.com/eclarke/ggbeeswarm –

risposta

13

Ecco una soluzione ggplot2 utilizzando 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

Grazie, sembra bello! E anche piuttosto semplice, potrebbe anche curare la mia confusione iniziale su ggplot2 :) Rimarrò per un po 'pensato, per vedere se qualcuno sa come farlo in reticolo o grafica di base. – Backlin

+0

Realizzato il [pacchetto beeswarm] (http://cran.r-project.org/web/packages/beeswarm/index.html) Ho menzionato sopra che utilizza il sistema di grafica standard, quindi ho già ottenuto due buoni modi per realizzarlo . – Backlin

+0

Per regolare la dimensione dei punti dati, aggiungere un'opzione dotsize a geom_dotplot() – wint3rschlaefer

Problemi correlati