如何在ggplot柱状图中标记Y轴8000-10000范围(红线及填充)
问题
我的数据集平均值通常在8000到10000之间,想在ggplot柱状图里标记这个范围:
- 显示y=8000和y=10000的红色水平线
- 若可以,填充两条线之间的区域
我之前试过创建数据集来添加线条,但没成功,附上现有代码和柱状图说明:
现有代码
Monthly_accidents2 %>% ggplot(aes(x=Month,y=Traffic_Accidents))+ geom_bar(stat="identity",fill = "#97B3C6")+ geom_text(aes(label = Traffic_Accidents), vjust = 0.5, colour = "white")+ ylim(0,12000)+ #coord_flip()+ theme_dark()+ labs(x=NULL, y="交通事故数量", title = "全年交通事故数量")
注:原代码中%>为%>%的笔误,已修正
柱状图说明
柱状图展示全年各月交通事故数量,y轴范围0-12000,每个柱子上标注了对应数值。
解决方法
无需额外创建数据集,直接用geom_rect填充区间、geom_hline添加水平线即可,注意把填充图层放在柱子图层前,避免遮挡:
修改后的完整代码
Monthly_accidents2 %>% ggplot(aes(x=Month,y=Traffic_Accidents))+ # 填充8000-10000区域,半透明红色 geom_rect(aes(xmin = -Inf, xmax = Inf, ymin = 8000, ymax = 10000), fill = "red", alpha = 0.2, inherit.aes = FALSE)+ # 添加两条红色水平线 geom_hline(yintercept = c(8000, 10000), color = "red", linetype = "solid")+ # 原有柱状图与文字标注 geom_bar(stat="identity",fill = "#97B3C6")+ geom_text(aes(label = Traffic_Accidents), vjust = 0.5, colour = "white")+ ylim(0,12000)+ #coord_flip()+ theme_dark()+ labs(x=NULL, y="交通事故数量", title = "全年交通事故数量")
关键代码解释
geom_rect:通过xmin=-Inf和xmax=Inf让填充区域覆盖整个x轴;alpha=0.2设置半透明,避免遮挡柱子;inherit.aes=FALSE防止继承主图的x轴映射,避免Month变量干扰geom_hline:直接指定yintercept为8000和10000,生成对应红色水平线
内容的提问来源于stack exchange,提问作者HAFZ
相关产品推荐
相关产品推荐

