Ggplot2 - дрожание и позиция
Я пытаюсь воссоздать фигуру из семинара GGplot2 http://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdf.
В этом случае я пытаюсь создать пример 5 с дрожащими точками данных, подверженными уловке. Когда я запускаю код, точки центрируются вокруг правильной строки, но не имеют дрожания.
Вот код непосредственно из презентации.
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
Ответы
Ответ 1
EDIT. Лучшее решение с ggplot2
версия 1.0.0 с помощью position_jitterdodge
. См. Ответ @Didzis Elferts. Обратите внимание, что dodge.width
управляет шириной уклонения, а jitter.width
управляет шириной дрожания.
Я не уверен, как код создавал граф в pdf.
Но что-то вроде этого приближает вас к тому, что вам нужно?
Преобразуйте tailindex
и memorypar
в числовое; добавьте их вместе; и результатом является координата x для слоя geom_jitter
. Вероятно, это более эффективный способ сделать это. Кроме того, я хотел бы видеть, как уклонение geom_boxplot
и geom_jitter
и без дрожания приведет к созданию графика в 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
![enter image description here]()
Ответ 2
В ggplot2
version 1.0.0
есть новая позиция с именем position_jitterdodge()
, созданная для такой ситуации. Это положение должно использоваться внутри geom_point()
, и там должно быть fill=
, используемое внутри aes()
, чтобы показать, какой переменной уклониться от ваших данных. Для управления шириной аргумента уклонения 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))
![enter image description here]()