[英]Line across groups of bars in ggplot2
我的数据框很小,我想用条形图构建条形图,以显示各个组之间的平均水平。
数据框:
cpcost = c("Coll.Punishment","Coll.Punishment", "Ind.Punishment",
"Ind.Punishment")
color = c(0,1,0,1)
mysum = c(0.3408240, 0.2935982, 0.3460490, 0.1267057)
genlevel = c(0.3111111,0.3111111, 0.2181818, 0.2181818)
temp = as.data.frame(cbind(cpcost,color,mysum,genlevel))
所以结果看起来像这样:
问题在于,现在我的工作方式非常丑陋(请参见下文)。 我基本上首先添加水平误差线。 但是由于每个误差线之间的距离很小,因此:
我还画了一条水平线以填充误差线之间的小空间。 (如果我绘制唯一的水平条,它将从条的中间开始)。
我确实相信,有更多更优雅的方法可以达到相同的结果。 我该怎么办?
谢谢!
ggplot(temp, aes(group=cpcost),
y = genlevel ) +
geom_bar(stat = "identity",aes(x = factor(color),
y = mysum,
group=cpcost,
fill = factor(color))) +
geom_errorbar(aes(x=factor(color),
y=genlevel,
ymin=genlevel,
ymax=genlevel,
group=cpcost
)) +
geom_line( aes(x=factor(color), y=genlevel,group=cpcost)) +
labs(x = "Round", y = "Share of Emptying") +
scale_fill_discrete(name='Crime',
labels=c("No", "Yes" )) +
ggtitle('Whistleblowing')+
facet_grid(~cpcost)
这会给您带来稍微不同的结果,但是我希望它足以满足您的需求。 更干净,并使用内置的geom_hline
:
library(ggplot2)
df <- data.frame(cpcost = c("Coll.Punishment", "Coll.Punishment", "Ind.Punishment", "Ind.Punishment"),
color = c(0,1,0,1),
mysum = c(0.3408240, 0.2935982, 0.3460490, 0.1267057),
genlevel = c(0.3111111,0.3111111, 0.2181818, 0.2181818))
ggplot(df) +
geom_col(aes(factor(color), mysum, fill = factor(color))) +
geom_hline(aes(yintercept = genlevel)) +
scale_fill_discrete(name='Crime', labels=c("No", "Yes" )) +
facet_wrap( ~ cpcost) +
labs(x = "Round", y = "Share of Emptying") +
ggtitle('Whistleblowing')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.