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

R语言ggplot2如何隐藏部分图例条目仅保留折线图例

ggplot2 仅保留折线图例、隐藏散点图例实现方法

问题复现

当前使用的绘图代码如下:

ggplot() + 
  geom_line(data=TS_SimHeads_HOBS_final, aes(x=as.Date(Date), y=BH2672), color='red') + 
  geom_point(data=Hydro_dates_wellData_2014_2018, aes(x=as.Date(Date), y=BH2672), color='red') +
  geom_line(data=TS_SimHeads_HOBS_final, aes(x=as.Date(Date), y=BH3025), color='green') + 
  geom_point(data=Hydro_dates_wellData_2014_2018, aes(x=as.Date(Date), y=BH3025), color='green') +
  xlab("Date") + ylab("Head")
  #theme_bw() 

运行后输出效果:
绘图结果
需求为图例仅展示模拟数据对应的折线条目,隐藏实测散点对应的条目。
附测试样例数据(截取前6行):

DateBH2672BH278BH2978BH2987BH3025BH312BH3963BH3962BH3957
2014-02-1931.2840078.867555.67102739.4841953.6020144.2951669.2368561.7084356.13871
2014-02-2030.7665678.873445.65694039.4901253.5648944.5067969.5091061.7063856.09621
2014-02-2130.4322678.880975.64213639.4990253.5604144.6576169.6570961.7012656.04346
2014-02-2230.1653278.889795.64381839.5110153.5606544.7833369.7562161.6964355.99459
2014-02-2329.9357778.899545.65087339.5254453.5597044.8942969.8298361.6933255.95241
2014-02-2429.7316278.909915.65899139.5414753.5568244.9952069.8884561.6923655.91639

实现方案

方法1:最小改动适配原有代码

只需要两处调整即可实现需求:

  • 在所有geom_point()图层中添加参数show.legend = FALSE,直接屏蔽散点层的图例生成
  • 将颜色分组映射移入geom_line()的aes()内部,通过scale_color_manual指定对应颜色,保证图例正确匹配监测井
    调整后代码如下:
ggplot() + 
  geom_line(data=TS_SimHeads_HOBS_final, 
            aes(x=as.Date(Date), y=BH2672, color = "BH2672")) + 
  geom_point(data=Hydro_dates_wellData_2014_2018, 
             aes(x=as.Date(Date), y=BH2672), 
             color='red', show.legend = FALSE) +
  geom_line(data=TS_SimHeads_HOBS_final, 
            aes(x=as.Date(Date), y=BH3025, color = "BH3025")) + 
  geom_point(data=Hydro_dates_wellData_2014_2018, 
             aes(x=as.Date(Date), y=BH3025), 
             color='green', show.legend = FALSE) +
  scale_color_manual(name = "监测井", values = c("BH2672" = "red", "BH3025" = "green")) +
  xlab("Date") + ylab("Head")
  #theme_bw() 

方法2:长格式规范写法(多监测井场景推荐)

如果后续需要添加更多监测井的绘图,逐图层写代码重复度太高,可以先将宽格式数据转为长格式,一次性完成映射,自动生成正确图例:

library(dplyr)
library(tidyr)

# 整理模拟数据为长格式
sim_data <- TS_SimHeads_HOBS_final %>%
  mutate(Date = as.Date(Date)) %>%
  pivot_longer(cols = starts_with("BH"), names_to = "well_id", values_to = "sim_head")

# 整理实测数据为长格式
obs_data <- Hydro_dates_wellData_2014_2018 %>%
  mutate(Date = as.Date(Date)) %>%
  pivot_longer(cols = starts_with("BH"), names_to = "well_id", values_to = "obs_head")

# 绘图
ggplot() +
  geom_line(data = sim_data, aes(x = Date, y = sim_head, color = well_id), linewidth = 0.8) +
  geom_point(data = obs_data, aes(x = Date, y = obs_head, color = well_id), 
             size = 1.2, show.legend = FALSE) +
  # 自定义颜色,可根据监测井数量扩展
  scale_color_manual(name = "模拟水位", 
                     values = c("BH2672" = "red", "BH3025" = "green")) +
  labs(x = "Date", y = "Head")
  #theme_bw()

上述两种方法最终输出的图例都只会保留模拟数据对应的折线条目,同个监测井的散点和折线颜色保持一致,不会出现散点对应的图例项。


内容的提问来源于stack exchange,提问作者ΚΩΝΣΤΑΝΤΙΝΟΣ ΠΑΝΑΓΙΩΤΟΥ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:06:23