2015-07-14 11 views
5

Ho il seguente frammento di codice in R:R: Come si diffondono i punti (jitter) rispetto all'asse x?

dat <- data.frame(cond = factor(rep("A",10)), 
        rating = c(1,2,3,4,6,6,7,8,9,10)) 
ggplot(dat, aes(x=cond, y=rating)) + 
    geom_boxplot() + 
    guides(fill=FALSE) + 
    geom_point(aes(y=3)) + 
    geom_point(aes(y=3)) + 
    geom_point(aes(y=5)) 

Questa particolare frammento di codice produce un grafico a scatole in cui un punto va oltre un altro (nel caso sopra un punto 3 va oltre un altro punto 3).

Come posso spostare il punto 3 in modo che il punto rimanga nella stessa posizione sull'asse y, ma si sposta leggermente a sinistra o a destra sull'asse x?

risposta

7

questo può essere realizzato utilizzando la funzione position_jitter:

geom_point(aes(y=3), position = position_jitter(w = 0.1, h = 0)) 

Aggiornamento: Per tracciare solo i tre punti in dotazione è possibile costruire un nuovo insieme di dati e trama che:

points_dat <- data.frame(cond = factor(rep("A", 3)), rating = c(3, 3, 5))     
ggplot(dat, aes(x=cond, y=rating)) + 
    geom_boxplot() + 
    guides(fill=FALSE) + 
    geom_point(aes(x=cond, y=rating), data = points_dat, position = position_jitter(w = 0.05, h = 0)) 
+0

molte grazie per la risposta rapida. Sì, a un certo punto ho provato anche quello. Il problema è che quando uso la funzione jitter traccia molti punti. Quindi nel mio esempio ho tre punti, due nella posizione 3, ma quando aggiungo position_jitter traccia più di 10 punti. Hai qualche idea del perché? – chao

+0

@chao: Ho aggiornato la risposta –

+0

Esattamente quello di cui avevo bisogno! Grazie! – chao

0

ggplot2 ora include position_dodge(). Dalla descrizione del aiuto: "Dodging conserva la posizione verticale di un geom durante la regolazione della posizione orizzontale."

quindi si può usare sia come geom_point(position = position_dodge(0.5)) o, se si vuole i punti schivare che sono collegati da linee e necessità la Dodge allo essere lo stesso in entrambi GEOMs, è possibile usare qualcosa come:

dat <- data.frame(cond = rep(c("A", "B"), each=10), x=rep(1:10, 2), y=rnorm(20)) 
dodge <- position_dodge(.3) # how much jitter on the x-axis? 
ggplot(dat, aes(x, y, group=cond, color=cond)) + 
    geom_line(position = dodge) + 
    geom_point(position = dodge) 
Problemi correlati