我正在尝试制作带有错误条的分组条形图。但是,我无法使误差线看起来正确(即比主线更细)和正确定位(在线的中心)。 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)
这是怎么回事?我该如何解决?
答案 0 :(得分:2)
如果将fill
移至全局aes()
,则position_dodge()
将按预期工作。另外,您可以通过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()
的问题似乎是this GitHub issue中讨论的问题,可以通过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))