You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:10:48