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

R语言ggplot2绘制多折线图如何在数据点旁添加数据标签

多折线图添加数据标签实现方案

你现有代码基于宽格式数据编写,无需调整原始数据结构,直接新增对应文本图层即可在数据点周边显示数值标签。

基础实现:固定位置标签

直接在原有绘图代码中,为两个变量分别添加geom_text()图层,通过偏移参数控制标签与数据点的距离,避免遮挡点、线元素,修改后完整代码如下:

ggplot(data, aes(year)) + 
  geom_line(aes(y = var1), color = "#E20335", size = 1.5) +
  geom_point(aes(y = var1), color = "#E20335", size = 3) +
  # 为var1系列添加数据标签
  geom_text(aes(y = var1, label = scales::comma(var1)), 
            color = "#E20335", size = 3, nudge_y = 150) +
  geom_line(aes(y = var2), color = "#292753", size = 1.5) +
  geom_point(aes(y = var2), color = "#292753", size = 3) +
  # 为var2系列添加数据标签
  geom_text(aes(y = var2, label = scales::comma(var2)), 
            color = "#292753", size = 3, nudge_y = 150) +
  scale_x_continuous(breaks = 2010:2020) +
  scale_y_comma() +
  labs(title = 'something',
       subtitle = 'something',
       x = 'This axis title intentionally left blank',
       y = 'This axis title intentionally left blank',
       caption = 'something')

核心参数说明:

  • label = scales::comma(var1):让标签数值和y轴保持一致的千分位逗号格式,和你原有scale_y_comma()的显示效果匹配
  • nudge_y = 150:控制标签相对于数据点的垂直偏移量,正数向上偏移、负数向下偏移,可根据你实际的y轴数值范围调整大小,数值范围大就调大该值,范围小就调小
  • 如需调整水平方向位置,可添加nudge_x参数设置水平偏移量

优化实现:自动避重叠标签

如果两条折线的数值比较接近,固定偏移的标签容易出现互相遮挡的问题,可以替换为ggrepel包提供的geom_text_repel()图层,自动计算标签位置避开图形元素,无需手动反复调整偏移量:

  1. 首次使用先安装包,之后每次使用加载即可:
    install.packages("ggrepel")
    library(ggrepel)
    
  2. 修改后的绘图代码:
    ggplot(data, aes(year)) + 
      geom_line(aes(y = var1), color = "#E20335", size = 1.5) +
      geom_point(aes(y = var1), color = "#E20335", size = 3) +
      geom_text_repel(aes(y = var1, label = scales::comma(var1)), 
                color = "#E20335", size = 3, min.segment.length = 0.2) +
      geom_line(aes(y = var2), color = "#292753", size = 1.5) +
      geom_point(aes(y = var2), color = "#292753", size = 3) +
      geom_text_repel(aes(y = var2, label = scales::comma(var2)), 
                color = "#292753", size = 3, min.segment.length = 0.2) +
      scale_x_continuous(breaks = 2010:2020) +
      scale_y_comma() +
      labs(title = 'something',
           subtitle = 'something',
           x = 'This axis title intentionally left blank',
           y = 'This axis title intentionally left blank',
           caption = 'something')
    

简化代码写法(可选)

如果后续需要添加更多折线,可以先把宽格式数据转为长格式,不用为每个变量重复写图层,代码可维护性更高:

library(tidyr)
# 宽表转长表
data_long <- pivot_longer(data, cols = c(var1, var2), names_to = "group", values_to = "val")

ggplot(data_long, aes(x = year, y = val, color = group)) +
  geom_line(size = 1.5) +
  geom_point(size = 3) +
  geom_text(aes(label = scales::comma(val)), nudge_y = 150, size = 3, show.legend = FALSE) +
  # 统一配置系列颜色
  scale_color_manual(values = c("var1" = "#E20335", "var2" = "#292753")) +
  scale_x_continuous(breaks = 2010:2020) +
  scale_y_comma() +
  labs(title = 'something',
       subtitle = 'something',
       x = 'This axis title intentionally left blank',
       y = 'This axis title intentionally left blank',
       caption = 'something')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:12:16