R 如何避免ggplot2中的重叠绘图

R 如何避免ggplot2中的重叠绘图,r,plot,ggplot2,R,Plot,Ggplot2,我想通过两次曝光(expo)绘制三个年龄组(agecat)的估计值。下面的代码生成了按字母顺序重新排列的年龄组的重叠图。我如何避免图的重叠,并保持现有的年龄组顺序? 我使用了以下代码: ggplot(mydf, aes(x = agecat, y = est,ymin = lcl, ymax = ucl, group=agecat,color=agecat,shape=agecat)) + geom_point(position="dodge",size = 4) + geom_li

我想通过两次曝光(expo)绘制三个年龄组(agecat)的估计值。下面的代码生成了按字母顺序重新排列的年龄组的重叠图。我如何避免图的重叠,并保持现有的年龄组顺序? 我使用了以下代码:

ggplot(mydf, aes(x = agecat, y = est,ymin = lcl, ymax = ucl,  group=agecat,color=agecat,shape=agecat))  +
  geom_point(position="dodge",size = 4) +
  geom_linerange(position="dodge",size =0.7) +
  geom_hline(aes(yintercept = 0))  + 
  labs(colour="Age Group", shape="Age Group") +    theme(axis.title=element_text(face="bold",size="12"),axis.text=element_text(size=12,face="bold")) 
样本数据:

 > dput(mydf)
    structure(list(expo = c(0, 1, 0, 1, 0, 1), est = c(0.290780632898979, 
    0.208093573361601, 0.140524761247529, 0.156713614649751, 0.444402395010579, 
    0.711469870845916), lcl = c(0.0679784035303221, -0.00413163014975071, 
    -0.208866152400888, -0.175393089838871, -0.227660022186016, 0.0755871550441212
    ), ucl = c(0.514078933380535, 0.420769190852455, 0.491138970050864, 
    0.489925205664665, 1.12099179726843, 1.35139300089608), agecat = c("young", 
    "young", "middle", "middle", "old", "old")), .Names = c("expo", 
    "est", "lcl", "ucl", "agecat"), row.names = c(2L, 4L, 6L, 8L, 
    10L, 12L), class = "data.frame")

可以按所需顺序将列agecat转换为具有级别的因子。然后,正如Heroka在评论中指出的那样,我们可以使用
facet\u wrap
实现类似的效果:

mydf$agecat <-  factor(mydf$agecat, levels=c("young", "middle", "old"))
ggplot(mydf, aes(x = agecat, y = est, ymin = lcl, ymax = ucl, group=agecat,color=agecat, shape=agecat))  + 
  geom_linerange(size =0.7) +
  geom_hline(aes(yintercept = 0))  + labs(colour="Age Group", shape="Age Group") + 
  facet_wrap(agecat~est,  scales="free_x", ncol=6) + geom_point(size = 4)+  theme(axis.title=element_text(face="bold",size="12"),axis.text=element_text(size=12,face="bold"),strip.text.x = element_blank())

mydf$agecat我会在绘图中使用
expo
作为变量来实现这一点。这将让ggplot知道您有重叠,因此您需要在
x
变量的每个级别回避。完成此操作后,您可以直接在两个几何图形中使用
position=position\u dodge()
,并将
width
参数设置为您想要的任何参数。有关何时需要显式设置
宽度的示例,请参见
position\u dodge
的帮助页面

在这里,我将用
group=expo
替换
group=agecat
。使用
而不是像
形状那样的美学
意味着在图形上没有指示哪个点代表哪个
expo
级别

mydf$agecat = factor(mydf$agecat, levels = c("young", "middle", "old"))

ggplot(mydf, aes(x = agecat, y = est, ymin = lcl, ymax = ucl,  group = expo, color = agecat, shape = agecat))  +
    geom_point(position = position_dodge(width = .5), size = 4) +
    geom_linerange(position = position_dodge(width = .5), size = 0.7) +
    geom_hline(aes(yintercept = 0))  + 
    labs(colour="Age Group", shape="Age Group") +    
    theme(axis.title = element_text(face="bold", size="12"),
          axis.text = element_text(size=12, face="bold"))

你说的“重叠”是什么意思?总的来说,情节看起来不错。至于“顺序”,搜索“重新排序栏”或类似的东西-解决方案也应该适合你(基本上你所需要做的就是重新排序年龄段系数的级别)。你使用的是旧版本的
ggplot2
?在当前版本<代码>位置=dodg>代码>应该写为“代码>位置=“dodGE”<代码>或“代码>位置= PosithydodGe()/Case>。我改变了答案。结果与您所寻找的非常相似。