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

如何使用ggplot2标记stat_summary均值线上的最大值?

在ggplot均值线上标记最大值的解决方案

嘿,我来帮你搞定在stat_summary生成的均值线上标记最大值的问题!先把你的数据整理成更清晰的表格方便查看:

序号TimeValueType
12018-04-23 00:00:000.00000000FALSE
22018-04-23 00:10:000.08971613FALSE
32018-04-23 00:20:000.02626635FALSE
42018-04-23 00:30:000.40684988FALSE
52018-04-23 00:40:000.29159049FALSE
62018-04-23 00:50:000.54625109FALSE

下面是具体的实现步骤,我会把完整代码和解释都写清楚:

步骤1:准备数据和加载包

首先确保你加载了ggplot2,并把数据整理成标准数据框(如果还没做的话):

library(ggplot2)

# 构建你的数据框
data <- data.frame(
  Time = as.POSIXct(c("2018-04-23 00:00:00", "2018-04-23 00:10:00", "2018-04-23 00:20:00",
                      "2018-04-23 00:30:00", "2018-04-23 00:40:00", "2018-04-23 00:50:00")),
  Value = c(0.00000000, 0.08971613, 0.02626635, 0.40684988, 0.29159049, 0.54625109),
  Type = rep(FALSE, 6)
)

步骤2:计算均值数据并定位最大值点

我们需要先算出stat_summary生成的均值线对应的所有数据点,然后从中精准定位最大值的位置:

# 按Time和Type分组计算均值,得到均值线的所有数据点
mean_data <- aggregate(Value ~ Time + Type, data, mean)
# 筛选出均值数据中Value最大的那一行
max_mean_point <- mean_data[which.max(mean_data$Value), ]

步骤3:绘制图形并标记最大值

在你原来的绘图代码基础上,添加标记最大值的点和可选的数值标签:

graph <- ggplot(data, aes(x = Time, y = Value, colour = Type, group = Type)) +
  # 原始散点层
  geom_point(size = 0.75, show.legend = FALSE) +
  # 均值线层
  stat_summary(fun = mean, geom = "line", size = 0.5, show.legend = FALSE) +
  # 用红色大点标记均值线上的最大值
  geom_point(data = max_mean_point, aes(x = Time, y = Value), 
             colour = "red", size = 2, show.legend = FALSE) +
  # 可选:添加最大值的数值标签(保留4位小数,vjust控制标签位置)
  geom_text(data = max_mean_point, aes(x = Time, y = Value, label = round(Value, 4)),
            vjust = -1, colour = "red", show.legend = FALSE)

# 输出最终图形
print(graph)

小提示

  • 预先计算均值数据能让我们精准定位到均值线上的最大值,避免和原始散点的最大值混淆
  • 如果你的数据有多个Type分组,这个方法会自动为每个分组标记各自均值线上的最大值
  • 你可以根据需求调整标记点的颜色、大小,以及标签的位置和格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:25:08