ggplot2 - 抖动和位置闪避一起 [英] ggplot2 - jitter and position dodge together
问题描述
我正在尝试从 GGplot2 研讨会中重新创建一个图 http://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdf.
I am trying to recreate a figure from a GGplot2 seminar http://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdf.
在这种情况下,我试图生成示例 5,其中抖动数据点会受到闪避.当我运行代码时,点以正确的线为中心,但没有抖动.
In this case, I am trying to generate Example 5, with jittered data points subject to a dodge. When I run the code, the points are centered around the correct line, but have no jitter.
这是直接来自演示文稿的代码.
Here is the code directly from the presentation.
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
推荐答案
EDIT:ggplot2
版本 1.0.0 使用 position_jitterdodge<有更好的解决方案/代码>.请参阅@Didzis Elferts 的回答.请注意,
dodge.width
控制躲避的宽度,jitter.width
控制抖动的宽度.
EDIT: There is a better solution with ggplot2
version 1.0.0 using position_jitterdodge
. See @Didzis Elferts' answer. Note that dodge.width
controls the width of the dodging and jitter.width
controls the width of the jittering.
我不确定代码是如何生成 pdf 中的图表的.
I'm not sure how the code produced the graph in the pdf.
但是这样的事情会让你接近你所追求的吗?
But does something like this get you close to what you're after?
我将 tailindex
和 memorypar
转换为数字;将它们加在一起;结果是 geom_jitter
层的 x 坐标.可能有更有效的方法来做到这一点.另外,我想看看如何躲避 geom_boxplot
和 geom_jitter
并且没有抖动,将在 pdf 中生成图表.
I convert tailindex
and memorypar
to numeric; add them together; and the result is the x coordinate for the geom_jitter
layer. There's probably a more effective way to do it. Also, I'd like to see how dodging geom_boxplot
and geom_jitter
, and with no jittering, will produce the graph in the 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
这篇关于ggplot2 - 抖动和位置闪避一起的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!