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

如何在分组箱线图中连接同受试者的偏移散点?

解决带Dodge箱线图中连接同一Subject散点的问题

问题背景

需要绘制带position_dodge的箱线图和散点,并用线条连接同一Marker组内同一Subject的散点,但原代码未达到预期效果。

原代码问题分析

  • geom_line仅按Subject分组,会错误地跨不同Marker连接点,违背“同一Marker组内连接”的需求
  • 未给geom_line设置匹配的position_dodge,导致线条位置无法对齐dodge后的散点

修正后的代码

library(tidyverse)
mock_data <- tibble::tribble(
  ~Subject, ~Marker, ~Cell_type, ~Value,
        "1",     "A",        "B",    70L,
        "2",     "A",        "B",    80L,
        "3",     "A",        "B",    90L,
        "1",     "A",        "T",     5L,
        "2",     "A",        "T",    10L,
        "3",     "A",        "T",    15L,
        "1",     "B",        "B",     1L,
        "2",     "B",        "B",     2L,
        "3",     "B",        "B",     3L,
        "1",     "B",        "T",    99L,
        "2",     "B",        "T",    90L,
        "3",     "B",        "T",    99L
  )

mock_data |> 
  ggplot(aes(x = Marker, y = Value)) +
  # 箱线图明确设置dodge宽度,与后续元素保持一致
  geom_boxplot(aes(fill = Cell_type), alpha = 0.2, position = position_dodge(width = 0.75)) +
  # 散点按Cell_type分组并dodge,确保与箱线图对齐
  geom_point(aes(col = Subject, group = Cell_type), position = position_dodge(width = 0.75), size = 3) +
  # 线条按Subject+Marker分组,仅连接同一Marker下同一受试者的点,同时设置dodge对齐
  geom_line(aes(group = interaction(Subject, Marker)), 
            lty = 2, col = "black", 
            position = position_dodge(width = 0.75))

关键改动说明

  • interaction(Subject, Marker)作为分组依据:确保线条只连接同一受试者在同一标记类型下的两个细胞类型散点,避免跨组连接
  • 统一position_dodge(width = 0.75):让箱线图、散点、线条的偏移位置完全匹配,保证视觉对齐
  • 保留geom_point的group = Cell_type:确保散点随箱线图按细胞类型偏移排列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:47:43