Вопрос по r, ggplot2 – ggplot2 - совмещение и дрожание позиции

26

Я пытаюсь воссоздать фигуру из семинара GGplot2http://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdf.

В этом случае я пытаюсь сгенерировать пример 5 с точечными точками данных, подверженными риску уклонения. Когда я запускаю код, точки центрируются вокруг правильной линии, но не имеют дрожания.

Вот код прямо из презентации.

<code>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
</code>
Учитывая, что Дидзис Элфертс предоставил лучший ответ, используяposition_jitterdodge доступно в ggplot2 версии 1.0.0, вы должны отменить мой ответ и принять ответ, предоставленный Didzis Elferts. Sandy Muspratt

Ваш Ответ

2   ответа
31

EDIT: Есть лучшее решение сggplot2 версия 1.0.0 с использованиемposition_jitterdodge, Смотрите @Didzis Elferts & apos; ответ. Обратите внимание, чтоdodge.width контролирует ширину уклонения иjitter.width контролирует ширину дрожания.

Я не уверен, как код создал график в формате PDF.

Но приближает ли что-то подобное к тому, что вам нужно?

Я конвертируюtailindex а такжеmemorypar к числовому; сложите их вместе; и результатом является координата х для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

Спасибо, я бы хотел, чтобы в ggplot2 был элегантный способ, но этот обходной путь делает все. Еще раз спасибо! user1381239
53

ggplot2 версия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

@DidzisElferts,outlier.colour = NA не работает в случае Rshiny / сюжетного отображения. есть ли обходной путь?
Вы также можете попробовать использовать цвет & # x2018; прозрачный & # x2019;
Спасибо тебе за этот пост. это очень полезно В настоящее время я пишу свой собственный код, который работает хорошо. Но я как-то получаю черный цвет для выбросов. Можете ли вы угадать, что может быть потенциальными причинами?
Черный цвет является цветом по умолчанию для выбросов. В этом коде дляgeom_boxplot() outlier.colour= установлен вNA не показывать им.
Привет, я только что нашел решение.outlier.colour должен быть написан цвет, а не цвет. Кажется, что американское заклинание здесь не одобрено. Спасибо за ваш ответ. :-)

Похожие вопросы