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

如何用ggplot仅绘制各x分组顶部y值点的连线?

问题

现有如下数据集,需基于x、y列进行可视化并关联z列信息,但无需绘制所有z值对应的点,仅保留每个x分组中的首个数据点(即y值最大的顶部点),并将这些点用线连接(类似参考图2:仅连接各x分组顶部点的折线图),而非连接所有数据点(类似参考图1:全量数据连线的折线图)。当前使用以下代码绘制了全量数据的连线,请问如何修改以实现需求?

数据集:

structure(list(x = c(-64.4427, -64.4427, -64.4427, -64.3412, 
-64.3412, -64.3412, -64.3412, -64.0203, -64.0203, -63.6396, -63.6396, 
-63.6396, -63.6396, -63.6396, -63.6396, -63.6396, -63.6396, -63.2791, 
-63.2791, -63.2791, -62.7842, -62.7842, -62.7842, -62.7842, -62.7842, 
-62.7842, -62.7842, -62.7842, -61.8798, -61.8798, -61.8798, -61.8798
 ), y = c(2582, 2301, 1750, 2490, 2220, 2000, 1700, 3025, 2650, 
3320, 3271, 3000, 2801, 2601, 2300, 2051, 1798, 3561, 3201, 2201, 
3892, 3850, 3750, 3501, 3301, 3001, 2700, 2300, 4259, 4100, 3620, 
3121), z = c(28.3265878478115, 28.3130766365866, 28.2790754780365, 
28.3286882228112, 28.3134761067483, 28.2963621888498, 28.2736333444117, 
28.3343768309236, 28.3169194745408, 28.3395710355091, 28.3401632547452, 
28.3282659767822, 28.3216608667596, 28.3109917133086, 28.28969088234, 
28.2731475151318, 28.2556126481574, 28.3357781854992, 28.3201236913069, 
28.2589132983799, 28.3365221487856, 28.3374476656256, 28.3319243679285, 
28.3177414449621, 28.3080447684229, 28.293909196108, 28.2762807654194, 
28.2528794735116, 28.3319284513409, 28.320727357254, 28.3005401796587, 
28.2761402040812)), class = "data.frame", row.names = c(NA, -32L
))

现有绘图代码:

ggplot(data = df, aes(x = x, y = y), fill = z, size = 1) + geom_line()

参考图说明:

  • 参考图1:全量数据连线的折线图,所有数据点被连接成线
  • 参考图2:仅连接各x分组顶部点的折线图,只保留每个x对应的y最大值点并连线

解决方案

要实现需求,需先筛选出每个x分组中y值最大的记录,再用筛选后的数据集绘图。推荐使用dplyr包完成数据筛选:

步骤1:准备工具(安装并加载dplyr)

如果还未安装dplyr,先执行安装命令:

install.packages("dplyr")

然后加载包:

library(dplyr)

步骤2:筛选每个x分组的顶部点

按x分组,提取每组中y值最大的行:

df_top <- df %>%
  group_by(x) %>%
  filter(y == max(y)) %>%
  ungroup()

步骤3:绘制目标折线图

修改ggplot代码,使用筛选后的数据集,同时关联z列信息(比如用颜色映射z值):

ggplot(data = df_top, aes(x = x, y = y, color = z)) +
  geom_line(linewidth = 1) +
  geom_point(size = 3) + # 显示顶部点,更直观
  scale_color_viridis_c(option = "plasma", name = "z值") + # 可选:优化颜色渐变与图例名称
  labs(x = "x", y = "y", title = "各x分组顶部点连线图")

代码说明

  • group_by(x):按x列对数据分组
  • filter(y == max(y)):筛选每组中y值最大的记录,即每个x对应的顶部点
  • color = z:将z值映射到线和点的颜色,实现z列信息的可视化关联
  • 添加geom_point可以清晰展示每个顶部数据点的位置,便于观察

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:27:11