我正在尝试制作带有错误条的分组条形图。但是,我无法使误差线看起来正确(即比主线更细)和正确定位(在线的中心)。该position
选项position_dodge()
似乎不正确工作,为什么我想不通-在其他类似的问题的例子基础,这应该工作。
我正在R版本3.4.2中运行ggplot2版本3.0.0。
一个最小的工作示例:
d<-data.frame(bin = factor(c(1,2,3,1,2,3)),type = factor(c(1,1,1,2,2,2)), beta = c(10,20,30,40,50,60), se = c(2,2,2,2,2,2))
ggplot(d, aes(x=bin,y=beta,ymin = beta - 1.96* se, ymax = beta+1.96* se)) +
geom_bar(aes(fill = type), position = position_dodge2(), stat="identity") +
geom_errorbar(position=position_dodge2(.9))
产生:正确的位置,但是太宽。使用position_dodge()
代替position_dodge2()
甚至无法正确定位:
ggplot(d, aes(x=bin,y=beta,ymin = beta - 1.96* se, ymax = beta+1.96* se)) +
geom_bar(aes(fill = type), position = position_dodge(), stat="identity") +
geom_errorbar(position=position_dodge(.9))
添加width
参数以geom_errorbar
破坏版本,position_dodge2()
而用则无效position_dodge()
:
ggplot(d, aes(x=bin,y=beta,ymin = beta - 1.96* se, ymax = beta+1.96* se)) +
geom_bar(aes(fill = type), position = position_dodge2(), stat="identity") +
geom_errorbar(position=position_dodge2(.9), width= .2)
ggplot(d, aes(x=bin,y=beta,ymin = beta - 1.96* se, ymax = beta+1.96* se)) +
geom_bar(aes(fill = type), position = position_dodge(), stat="identity") +
geom_errorbar(position=position_dodge(.9), width = .2)
这里发生了什么?我该如何解决?
如果您fill
进入全球范围,aes()
那么position_dodge()
将按预期工作。或者,您可以将分组变量via添加group
到geom_errorbar()
。
ggplot(d, aes(x = bin, y = beta,
ymin = beta - 1.96*se, ymax = beta+1.96*se, fill = type)) +
geom_bar(position = position_dodge(), stat="identity") +
geom_errorbar(position=position_dodge(.9), width = .2)
问题position_dodge2()
似乎是此GitHub问题中讨论的问题,可以通过padding
参数解决。请注意,此方法不再有width
争论geom_errorbar()
。
ggplot(d, aes(x = bin, y = beta,
ymin = beta - 1.96*se, ymax = beta+1.96*se, fill = type)) +
geom_bar(position = position_dodge2(), stat="identity") +
geom_errorbar(position = position_dodge2(.9, padding = .6))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句