2011-09-14 6 views
2

Quelle est la meilleure façon de générer un dotplot avec deux facteurs comme celui-ci, de préférence en utilisant des tracés R standard (pas ggplot) et à partir d'une trame de données 2x2. Les lignes horizontales devraient être des moyens. J'ai essayé les cartes de points de cleveland, mais ne peut pas comprendre comment obtenir deux séries de données et ont les points Jittered:Tracé de points dans R en utilisant R Tracé

example dotplot

+4

vous pouvez nous montrer ce que vous avez essayé (de sorte que Q ne ressemble pas à « travailler pour moi »). Cela ne nous dérangerait pas non plus de manipuler de fausses données. –

+0

Alors, quel est le problème avec ggplot et/ou treillis? Cela peut prendre un peu de temps pour apprendre quelques nouvelles fonctions, mais votre travail sur les cartes sera beaucoup plus facile à long terme. –

Répondre

12

Le morceau de code suivant devrait faire l'affaire:

set.seed(1) 
t1 = rnorm(10); t2 = rnorm(10, 2) 
t1_g2 = rnorm(10, 4);t2_g2 = rnorm(10) 

##Don't print the axes labels 
par(ann=FALSE) 

##Plot first set of data. 
##Need to check for sensible ranges 
##Use the jitter function to spread data out. 
plot(jitter(rep(0,10),amount=0.2), t1, 
    xlim=range(-0.5,3.5), ylim=range(-3,8), 
    axes=FALSE,frame.plot=TRUE) 
points(jitter(rep(1,10), amount=0.2), t1_g2, col=2) 
points(jitter(rep(2,10), amount=0.2), t2) 
points(jitter(rep(3,10), amount=0.2), t2_g2, col=2) 

##Add in the y-axis 
axis(2, seq(-4,8,by=2)) 

##Add in the x-axis labels 
mtext("Treatment 1", side = 1, at=0.5) 
mtext("Treatment 2", side = 1, at=2.5) 

##Add in the means 
segments(-0.25, mean(t1), 0.25, mean(t1)) 
segments(0.75, mean(t1_g2), 1.25, mean(t1_g2)) 
segments(1.75, mean(t2), 2.25, mean(t2)) 
segments(2.75, mean(t2_g2), 3.25, mean(t2_g2)) 

##Add in the legend 
legend(0, 8, c("Group 1", "Group 2"), col=1:2, pch=1) 

ce qui donne:

enter image description here

+1

juste aussi simple, hein? Beau travail +1 – Chase

Questions connexes