2011-07-25 83 views
12

我有两组误差点的点。我想抵消第二个,所以它显示在第一集略微下降,所以它不会掩盖原来的。ggplot2偏移scatterplot点

这是一个模拟数据集:

x=runif(4,-2,2) 
y=c("A","B","C","D") 
upper=x+2 
lower=x-2 
x_1=runif(4,-1,3) 
upper_1=x_1+1 
lower_1=x_1-2 

这里是我用来制造阴谋代码:

qplot(x,y)+ 
    geom_point(size=6)+ 
    geom_errorbarh(aes(xmax=upper,xmin=lower),size=1)+ 
    geom_point(aes(x_1,y),size=6,pch=8,vjust=-1,col="grey40")+ 
    geom_errorbarh(aes(xmax=upper_1,xmin=lower_1),size=1,col="grey40") 

,这里是剧情:

scatterplot

我想灰色的星号和相关的错误栏被绘制成一公顷ir下方的黑圈和相关的误差线。我会转换数据集,但Y轴是分类变量。

+0

里奇的回答比我的方法好得多,所以我删除了我的。 –

回答

20

使用Richie的重组你的数据,这也是可能的范围内ggplot纯粹,而不必乱用轴:

dodge <- position_dodge(width=0.5) 
p <- ggplot(dfr,aes(x=y,y=x,colour=type)) + 
     geom_point(aes(shape=type),position=dodge) + 
     geom_errorbar(aes(ymax=upper,ymin=lower),position = dodge) + 
     scale_colour_manual(values = c('gray','black')) + 
     scale_shape_manual(values = c(8,19)) + 
     coord_flip() + 
     opts(legend.position="none") 

,给了我这样的情节:

enter image description here

注意:自版本0.9.2 opts已经theme一直replaced

+ theme(legend.position = "none") 
+0

对不起,不熟悉scale_shape_manual和coord_flip参数,但qplot正在反弹一个错误:对二元运算符的非数字参数 – jslefche

+0

@jslefche - 您可能会在尝试将此解决方案转换为'qplot'时引入错误。学会使用'ggplot()',它会带来好处。 – joran

+0

啊,我看到你在那里用coord_flip()做了什么。非常好。 'ggplot()'很好用。标记为已回答。 – jslefche

10

将您的数据重组为数据框。

x = runif(4,-2,2) 
x_1 = runif(4,-1,3) 
dfr <- data.frame(
    x = c(x, x_1), 
    y = rep(c("A","B","C","D"), 2), 
    upper = c(x+2, x_1+1), 
    lower = c(x-2, x_1-2), 
    type = rep(c("alpha", "beta"), each = 4) 
) 

增加一列,就是因素y的数字版本。

dfr$y_numeric <- with(dfr, 
    as.numeric(y) - ifelse(type == "alpha", 0, 0.1) 
) 

      x y upper  lower type y_numeric 
1 0.16694617 A 2.166946 -1.83305383 alpha  1.0 
2 1.95060734 B 3.950607 -0.04939266 alpha  2.0 
3 1.85516860 C 3.855169 -0.14483140 alpha  3.0 
4 0.08773196 D 2.087732 -1.91226804 alpha  4.0 
5 0.74837995 A 1.748380 -1.25162005 beta  0.9 
6 0.61489655 B 1.614897 -1.38510345 beta  1.9 
7 2.31641418 C 3.316414 0.31641418 beta  2.9 
8 2.62842027 D 3.628420 0.62842027 beta  3.9 

现在您的绘图代码更简单。

ggplot(dfr, aes(x, y_numeric, colour = type)) + 
    geom_point(size = 6) + 
    geom_errorbarh(aes(xmax = upper,xmin = lower), size = 1) + 
    scale_colour_grey() 

final image with staggered plots

1

贾里德泛达在github上一个梦幻般的剧本起来,创建一个新的功能,position_dodgev,对于水平误差线。

它在这里: https://github.com/jaredlander/coefplot/blob/master/R/position.r

,我发现它通过他原来的职位,它具有目前没有一起工作我安装GGPLOT2的旧版本: http://www.jaredlander.com/2013/02/vertical-dodging-in-ggplot2/

您可以使用自己的功能你将与​​geom_errorbar,如position_dodge,

... + geom_errorbarh(aes(xmin = LowInner, 
    xmax = HighInner), height = 0.5, lwd = 1, position = position_dodgev(height = 0.8)) 

该解决方案为我,为我刻面的​​情节,也不想惹AR在data.frame中创建一个新列。