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

如何在带分面的ggplot2折线图X轴叠加基于cluster_mass的rug plots?

分面折线图添加带颜色深浅的X轴Rug Plot实现

要实现仅在cluster_mass非NA位置显示、且颜色深浅由cluster_mass数值决定的X轴rug plot,只需在原ggplot代码中添加geom_rug()并做如下配置,分面布局会自动适配:

修改后的完整代码

df <- data.frame("Condition" = c("Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender", "Gender"),
             "Agreement" = c("Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement", "Non-Agreement"),
             "Time" = c(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18),
             "Mean_Amplitude" = c(1.76, 1.78, 1.80, 1.83, 1.87, 1.75, 1.56, 1.65, 1.7, 1.9, 1.75, 1.75, 1.75, 1.85, 1.73, 1.85, 1.65, 1.7, 1.7, 1.8, 1.76, 1.78, 1.80, 1.83, 1.87, 1.75, 1.56, 1.65, 1.7, 1.9, 1.75, 1.75, 1.75, 1.85, 1.73, 1.85, 1.65, 1.7, 1.7, 1.8),
             "Group" = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B"),
             "Language" = c("X", "X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X"),
             "cluster_mass" = c(NA, NA, NA, 141.2, 141.2, 141.2, 141.2,NA, 1000, 1000, NA, NA, NA, 141.2, 141.2, 141.2, 141.2,NA, 1000, 1000, NA, NA, NA, 141.2, 141.2, 141.2, 141.2,NA, 1000, 1000, NA, NA, NA, 141.2, 141.2, 141.2, 141.2,NA, 1000, 1000))

df %>%
  ggplot(aes(x = Time, y = Mean_Amplitude, color = Agreement, linetype = Agreement, size = Agreement)) +
  geom_line() +
  # 添加带颜色深浅的X轴rug plot
  geom_rug(
    data = ~subset(.x, !is.na(cluster_mass)), # 仅保留cluster_mass非NA的行
    aes(x = Time, color = cluster_mass),      # 映射颜色到cluster_mass数值
    side = "b",                               # 在X轴底部绘制rug
    inherit.aes = FALSE,                      # 不继承全局的color映射
    size = 1.5                                # 调整rug线条粗细
  ) +
  scale_color_manual(values = c("Non-Agreement" = "red", "Agreement" = "blue")) +
  # 为cluster_mass设置颜色渐变(浅到深)
  scale_color_gradient(low = "lightgray", high = "black") +
  scale_linetype_manual(values = c("Non-Agreement" = "solid", "Agreement" = "solid")) +
  scale_size_manual(values = c("Non-Agreement" = 0.4, "Agreement" = 0.6)) +
  theme_classic() +
  facet_wrap(~Group*Language, ncol = 2, labeller = label_wrap_gen(multi_line = FALSE)) +
  geom_vline(xintercept = 0, linetype = "dashed") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  labs(x = "Time (ms)", y = expression(paste("Amplitude (", mu, "V)"))) +
  theme(axis.text = element_text(size = 12),
        axis.title = element_text(size = 16),
        legend.text = element_text(size = 12),
        legend.position = "bottom",
        strip.background = element_blank(),
        strip.text.x = element_text(size = 12),
        legend.title = element_blank())

关键配置说明

  • 过滤数据:通过data = ~subset(.x, !is.na(cluster_mass))筛选出cluster_mass不为空的观测,确保仅在对应Time位置绘制rug。
  • 颜色映射:在geom_rug的aes中单独指定color = cluster_mass,并通过scale_color_gradient()设置颜色渐变规则,数值越大颜色越深。
  • 分面适配:由于数据本身包含Group和Language分面变量,geom_rug会自动跟随分面布局,在每个子图的对应位置绘制rug。
  • 避免继承冲突:设置inherit.aes = FALSE,防止继承全局的color = Agreement映射,确保rug的颜色仅由cluster_mass决定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:06:23