ggplot2-jitter i pozycja dodge razem
Próbuję odtworzyć postać z seminarium GGplot2 http://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdf .
W tym przypadku, staram się wygenerować przykład 5, z jittered punktów danych podlegających dodge. Kiedy uruchamiam kod, punkty są wyśrodkowane wokół właściwej linii, ale nie mają jittera.
Oto kod bezpośrednio z prezentacji.
set.seed(12345)
hillest<-c(rep(1.1,100*4*3)+rnorm(100*4*3,sd=0.2),
rep(1.9,100*4*3)+rnorm(100*4*3,sd=0.2))
rep<-rep(1:100,4*3*2)
process<-rep(rep(c("Process 1","Process 2","Process 3","Process 4"),each=100),3*2)
memorypar<-rep(rep(c("0.1","0.2","0.3"),each=4*100),2)
tailindex<-rep(c("1.1","1.9"),each=3*4*100)
ex5<-data.frame(hillest=hillest,rep=rep,process=process,memorypar=memorypar, tailindex=tailindex)
stat_sum_df <- function(fun, geom="crossbar", ...) {stat_summary(fun.data=fun, geom=geom, ...) }
dodge <- position_dodge(width=0.9)
p<- ggplot(ex5,aes(x=tailindex ,y=hillest,color=memorypar))
p<- p + facet_wrap(~process,nrow=2) + geom_jitter(position=dodge) +geom_boxplot(position=dodge)
p
2 answers
EDIT : istnieje lepsze rozwiązanie z ggplot2
Wersja 1.0.0 używając position_jitterdodge
. Zobacz odpowiedź @ Didzis Elferts. Zauważ, że dodge.width
kontroluje szerokość uniku i jitter.width
kontroluje szerokość jitteringu.
Nie jestem pewien, w jaki sposób Kod wygenerował wykres w pdf.
Ale czy coś takiego przybliża cię do tego, czego szukasz?
Zamieniam tailindex
i memorypar
na liczbowe; dodaję je razem; a wynikiem jest współrzędna x dla warstwy geom_jitter
. Prawdopodobnie jest na to bardziej skuteczny sposób. Chciałbym również zobaczyć, jak unikanie geom_boxplot
i geom_jitter
, i bez drgań, stworzy wykres w pdf.
library(ggplot2)
dodge <- position_dodge(width = 0.9)
ex5$memorypar2 <- as.numeric(ex5$tailindex) +
3 * (as.numeric(as.character(ex5$memorypar)) - 0.2)
p <- ggplot(ex5,aes(x=tailindex , y=hillest)) +
scale_x_discrete() +
geom_jitter(aes(colour = memorypar, x = memorypar2),
position = position_jitter(width = .05), alpha = 0.5) +
geom_boxplot(aes(colour = memorypar), outlier.colour = NA, position = dodge) +
facet_wrap(~ process, nrow = 2)
p
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-04 00:22:00
W wersji ggplot2
1.0.0
jest nowa pozycja o nazwie position_jitterdodge()
, która jest stworzona dla takiej sytuacji. Ta pozycja powinna być używana wewnątrz geom_point()
i powinna być fill=
używana wewnątrz aes()
, aby pokazać, o jaką zmienną dodawać dane. Aby kontrolować szerokość argumentu uniku należy użyć argumentu dodge.width=
.
ggplot(ex5,aes(x=tailindex ,y=hillest,color=memorypar,fill=memorypar)) +
facet_wrap(~process,nrow=2) +
geom_point(position=position_jitterdodge(dodge.width=0.9)) +
geom_boxplot(fill="white",outlier.colour = NA,
position = position_dodge(width=0.9))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-24 10:13:46