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

R语言ggplot2多数据框绘图合并图例的实现方法咨询

我明白你的痛点——用多个数据框绘图时,默认的图例总是分开,没法得到你想要的合并效果。不用合并数据框也能解决这个问题,核心思路是把颜色和线型都绑定到同一个组合标签上,让ggplot把它们识别为同一个图例的不同条目。

你可以修改每个geom_line的美学映射,给每个数据框对应的线条指定一个唯一的组合标签(比如"Target ASS"),然后让color和linetype都映射到这个标签。接着通过手动刻度设置,给每个标签匹配对应的颜色和线型,最后ggplot会自动把两个美学合并成一个图例。

修改后的代码如下:

# 初始化空的ggplot,因为每个geom都指定了自己的data
fig_ObjPlur_ASSenTD <- ggplot() + 
  # Target ASS:蓝色实线
  geom_line(
    data = gazetarget_ObjPlur_ASS,
    aes(x = Time, y = Targetgaze, color = "Target ASS", linetype = "Target ASS"),
    size = 1
  ) + 
  # Distractor ASS:红色实线
  geom_line(
    data = gazeother_ObjPlur_ASS,
    aes(x = Time, y = Othergaze, color = "Distractor ASS", linetype = "Distractor ASS"),
    size = 1
  ) + 
  # Target TD:蓝色虚线
  geom_line(
    data = gazetarget_ObjPlur_TD,
    aes(x = Time, y = Targetgaze, color = "Target TD", linetype = "Target TD"),
    size = 1
  ) + 
  # Distractor TD:红色虚线
  geom_line(
    data = gazeother_ObjPlur_TD,
    aes(x = Time, y = Othergaze, color = "Distractor TD", linetype = "Distractor TD"),
    size = 1
  ) + 
  # 手动设置颜色:Target类为蓝色,Distractor类为红色
  scale_color_manual(
    name = "Condition & Group",
    values = c(
      "Target ASS" = "blue",
      "Distractor ASS" = "red",
      "Target TD" = "blue",
      "Distractor TD" = "red"
    )
  ) + 
  # 手动设置线型:ASS组为实线,TD组为虚线
  scale_linetype_manual(
    name = "Condition & Group",
    values = c(
      "Target ASS" = 1,
      "Distractor ASS" = 1,
      "Target TD" = 2,
      "Distractor TD" = 2
    )
  ) + 
  # 确保图例线条粗细和图中一致,同时合并图例
  guides(
    color = guide_legend(override.aes = list(size = 1)),
    linetype = guide_legend(override.aes = list(size = 1))
  ) +
  theme(legend.key.width = unit(2.5, "line")) 

# 添加标题和坐标轴设置
fig_ObjPlur_ASSenTD + 
  ggtitle("Looks to target vs. distractor picture") + 
  xlab("Time in milliseconds from sentence start") + 
  ylab("Proportion of looks") + 
  xlim(0, 3000)

关键说明:

  1. 组合标签映射:每个线条的color和linetype都绑定到同一个组合标签(比如"Target ASS"),这样ggplot会把它们视为同一个图例条目的属性。
  2. 手动刻度匹配:scale_color_manual和scale_linetype_manual使用相同的图例名称,并且每个标签对应唯一的颜色+线型组合。
  3. 图例合并:因为两个刻度的名称相同,且每个标签的属性一一对应,ggplot会自动将它们合并成一个包含4个条目的图例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:42:36