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

ggplot2如何为每条geom_line添加数据标注和点位并优化显示效果

实现方案

你可以按照以下步骤修改代码,同时添加死亡数标注并优化排版:

  1. 先修复原代码中x轴变量名不一致的问题,全局使用数据集中的EPI_WEEK作为x轴变量
  2. 新增死亡线对应的标注层,注意标注的y坐标需要和死亡线的坐标匹配,即乘以缩放系数scl,标注内容直接使用原始DEATHS数值即可
  3. 错开两类标注的位置,病例标注放在线条上方,死亡标注放在线条下方,避免重叠
  4. 适当调大y轴上限,预留标注显示空间,避免标注被边界截断
  5. 可选使用geom_label替代geom_text,增加白色背景提升标注可读性,同时让标注颜色和对应线条颜色一致,视觉区分更清晰

修改后的完整代码如下:

scl = 10

ggplot(data = casos_obitos, aes(x = EPI_WEEK, group =1))+
  # 调整y轴上限,预留足够的标签显示空间
  scale_y_continuous(limits = c(0, max(c(casos_obitos$CASES, casos_obitos$DEATHS*scl)) + 100), 
                     expand = expansion(mult = c(0, .1)),
                     sec.axis = sec_axis(~./scl, name = "Nº de Óbitos"))+
  geom_line(aes(y = CASES, color = "CASES"), size = 1)+
  geom_line(aes(y = DEATHS*scl, color = "DEATHS"), size = 1) +
  # 病例数标注:放在蓝色线上方,颜色和线条一致
  geom_label(aes(y = CASES, label= CASES), hjust= 0.5, vjust = -0.8, size= 2.0, 
             color= "blue", fill = "white", label.size = NA, check_overlap = TRUE) +
  # 死亡数标注:放在红色线下方,颜色和线条一致
  geom_label(aes(y = DEATHS*scl, label= DEATHS), hjust= 0.5, vjust = 1.2, size= 2.0, 
             color= "red", fill = "white", label.size = NA, check_overlap = TRUE) +
  labs(x = "Semana Epidemiológica", y = "Nº de Casos") +
  scale_colour_manual(" ", values=c("CASES" = "blue", "DEATHS" = "red"))+
  theme_minimal(base_size = 10) +
  theme(legend.position = "bottom", axis.line = element_line(colour = "black"), 
        axis.text.x=element_text(angle = 90, vjust = 0.5, hjust=1, color="black"), 
        axis.text.y=element_text(color="black"))

补充说明

  • check_overlap = TRUE参数会自动隐藏重叠的标注,适合数据点密集的场景
  • 你可以根据实际显示效果微调vjust的数值,调整标注和线条的距离
  • 如果不需要白色背景,把geom_label换回geom_text、去掉fill和label.size参数即可

内容的提问来源于stack exchange,提问作者user15159175

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:24:01