R 如何避免ggplot2中的重叠绘图
我想通过两次曝光(expo)绘制三个年龄组(agecat)的估计值。下面的代码生成了按字母顺序重新排列的年龄组的重叠图。我如何避免图的重叠,并保持现有的年龄组顺序? 我使用了以下代码: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
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>。我改变了答案。结果与您所寻找的非常相似。