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

如何在ggplot中标记最大值并添加非贯穿式对应辅助线

解决ggplot添加非贯穿式最大值辅助线与标记的问题

核心思路

放弃使用会贯穿整个绘图区的geom_hline()/geom_vline(),改用geom_segment()指定线段的起点与终点,实现非贯穿的辅助线;同时提取最大值对应的坐标,用文本标记数值。

示例代码实现

基于你提供的可复现示例修改:

library(ggplot2)

col1 <- c(1,2,3)
col2 <- c(2,9,6)
df <- data.frame(col1,col2)

# 提取最大值对应的x、y坐标
max_val <- max(df$col2)
max_x_pos <- df$col1[which.max(df$col2)]

ggplot(data = df) +
  geom_line(aes(x=col1,y=col2)) +
  # 绘制从x轴到最大值点的垂直线段
  geom_segment(aes(x = max_x_pos, xend = max_x_pos, y = 0, yend = max_val), 
               linetype = "dashed", color = "red") +
  # 绘制从y轴到最大值点的水平线段
  geom_segment(aes(x = 0, xend = max_x_pos, y = max_val, yend = max_val), 
               linetype = "dashed", color = "red") +
  # 标记最大值
  geom_text(aes(x = max_x_pos, y = max_val, label = paste("最大值:", max_val)),
            vjust = -0.5, color = "red")

适配双折线原始场景

如果处理dat中的两条折线(foo-bar和foo_land-bar_land),只需分别提取两组数据的最大值坐标,重复上述逻辑即可:

# 提取第一条折线的最大值
max_bar <- max(dat$bar)
max_foo <- dat$foo[which.max(dat$bar)]

# 提取第二条折线的最大值
max_bar_land <- max(dat$bar_land)
max_foo_land <- dat$foo_land[which.max(dat$bar_land)]

ggplot(data = dat) +
  geom_line(aes(x=foo,y=bar)) +
  geom_line(aes(x=foo_land,y=bar_land)) +
  # 第一条折线的辅助线与标记
  geom_segment(aes(x = max_foo, xend = max_foo, y = 0, yend = max_bar), 
               linetype = "dashed", color = "blue") +
  geom_segment(aes(x = 0, xend = max_foo, y = max_bar, yend = max_bar), 
               linetype = "dashed", color = "blue") +
  geom_text(aes(x = max_foo, y = max_bar, label = paste("最大值:", max_bar)),
            vjust = -0.5, color = "blue") +
  # 第二条折线的辅助线与标记
  geom_segment(aes(x = max_foo_land, xend = max_foo_land, y = 0, yend = max_bar_land), 
               linetype = "dashed", color = "green") +
  geom_segment(aes(x = 0, xend = max_foo_land, y = max_bar_land, yend = max_bar_land), 
               linetype = "dashed", color = "green") +
  geom_text(aes(x = max_foo_land, y = max_bar_land, label = paste("最大值:", max_bar_land)),
            vjust = -0.5, color = "green")

参数调整说明

  • 可修改linetype(线型)、color(颜色)调整辅助线样式
  • 调整vjust参数控制标记文本的垂直偏移,避免与折线重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:35:42