我正在创建类似于下面第一个示例图像的图,并且需要类似于下面第二个示例的图。
library(ggplot2)
library(scales)
# some data
data.2015 = data.frame(score = c(-50,20,15,-40,-10,60),
area = c("first","second","third","first","second","third"),
group = c("Findings","Findings","Findings","Benchmark","Benchmark","Benchmark"))
data.2014 = data.frame(score = c(-30,40,-15),
area = c("first","second","third"),
group = c("Findings","Findings","Findings"))
# breaks and limits
breaks.major = c(-60,-40,-22.5,-10, 0,10, 22.5, 40, 60)
breaks.minor = c(-50,-30,-15,-5,0, 5, 15,30,50)
limits =c(-70,70)
# plot 2015 data
ggplot(data.2015, aes(x = area, y = score, fill = group)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.9)) +
coord_flip() +
scale_y_continuous(limit = limits, oob = squish, minor_breaks = breaks.minor, breaks = breaks.major)
data.2014 只有“发现”组的值。我想在图上显示那些 2014 年的调查结果值,在适当的/对应的 data.2015$area 上,其中有 2014 年的数据可用。
为了仅在“发现”(红色条)数据上显示去年的数据,我想使用从相关 data.2015 条的值产生的单边误差条/晶须,并在 data.2014 终止值,例如:
我想通过使用图层和绘制误差线来做到这一点,以便 2015 年的数据可以重叠,但是当 2014 年的结果 abs() 小于 2015 年的结果并因此被遮挡时,这不起作用。
注意事项:
- 我希望误差条/晶须与条的宽度相同,甚至可能是带有实心帽的虚线。
- 值减少时红线加分,值增加时绿线加分
- 我在一个循环中生成了很多这样的图,有时有很多组,每个图中的区域数量不同。2014年的数据(在这个阶段)总是只显示一个组,每个区域都有一些数据(除了只有一个NA案例,但需要为那个场景准备)
编辑
所以我已经添加到下面的解决方案中,我使用了那个确切的代码,而是使用了geom_linerange
这样它会添加没有大写的行,然后我也使用了geom_errorbar
,但是将 ymin 和 ymax 设置为相同的值,所以结果是一个单边误差线ggplot
geom_bar
!谢谢您的帮助。