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

如何使用geom_label()为折线图重要点位添加带指向线的文本标注

实现带引线文本标签的两种方案

方案1:使用ggrepel包(推荐,适配多标签自动防重叠)

这是ggplot生态中最常用的标签标注扩展包,可自动生成引线、避免标签遮挡图形元素。

  1. 首先安装加载依赖包:
# 首次使用需安装
install.packages("ggrepel")
# 加载包
library(tidyverse)
library(ggrepel)
  1. 绘图代码:
dat <- data.frame(NumSunSpots = sunspot.year, Year = c(1700:1988))

dat %>% 
  ggplot(aes(Year, NumSunSpots))+
  geom_line()+
  geom_label_repel(
    # 筛选需要标注的目标点位
    data = filter(dat, Year == 1952),
    aes(label = "Look at what is happening!"),
    # 调整标签相对于目标点的偏移距离
    nudge_x = -15,
    nudge_y = 20,
    # 自定义引线样式
    segment.color = "grey40",
    segment.size = 0.3,
    # 引线末端加箭头
    arrow = arrow(length = unit(0.01, "npc"))
  )

参数说明:可通过调整nudge_x/nudge_y修改标签位置,segment开头的参数可调整引线的颜色、粗细、线型。

方案2:原生ggplot2手动实现(无需安装额外包)

通过geom_segment绘制引线+geom_label绘制文本的组合实现,适合单点位精准控制:

library(tidyverse)
dat <- data.frame(NumSunSpots = sunspot.year, Year = c(1700:1988))

# 先提取目标点的太阳黑子数值
target_value <- dat$NumSunSpots[dat$Year == 1952]

dat %>% 
  ggplot(aes(Year, NumSunSpots))+
  geom_line()+
  # 绘制引线:x/y为标签端坐标,xend/yend为目标点坐标
  geom_segment(
    aes(x = 1937, y = 175, xend = 1952, yend = target_value),
    color = "grey40",
    size = 0.3,
    arrow = arrow(length = unit(0.01, "npc"))
  )+
  # 绘制文本标签
  geom_label(
    aes(x = 1937, y = 175, label ="Look at what is happening!"), 
    vjust = 1, 
    hjust = 1
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:42:02