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

如何绘制x轴为分类变量、双变量分组的线点组合图?

双分类X轴的分组连线ggplot绘图实现

需求说明

  • X轴包含2个分类类别
  • 线条与数据点的颜色由**subject(受试者)**变量定义
  • 数据点的形状由**Electrode(电极)**变量定义
  • 同一分组(同受试者+同电极)的点在两个X分类间用线条连接

示例数据

bdataPEV <- structure(list(
  subject = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 
                        4L, 4L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), 
                      .Label = c("1", "2", "3", "6"), class = "factor"),
  Electrode = c("LAN", "SAN", "PAN", "LAN", "SAN", "PAN", "LAN", "SAN", "PAN", "LAN", "SAN", "PAN", 
                "LAN", "SAN", "PAN", "LAN", "SAN", "PAN", "LAN", "SAN", "PAN", "LAN", "SAN", "PAN", 
                "LAN", "SAN", "PAN", "LAN", "SAN", "PAN", "LAN", "SAN", "PAN", "LAN", "SAN", "PAN"),
  variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
                         2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                         2L, 2L, 2L),
                       .Label = c("PEVsum_block_noB", "PEVsum_block_B", "PEVsum_block_B_norm", 
                                  "PEVsum_block_B_inhibition", "PEVsum_blok_B_inhibition_norm"), 
                       class = "factor"),
  value = c(26.5655048141819, 24.25, 4.30277563773199, 158.352853610442, 100.585046948683, 26.0372066865141, 
            147.516666666667, 156.7275, 65.9128571428571, 1.7378211394883, 1.9853826151828, 2.96232650874689, 
            4.24264068711928, 14, 1, 141.354165131417, 90.2108640907513, 5, 130.96, 137.72, 23.32, 
            2.4099999998795, 1.86214499960808, 2.96192610446308, -2.82842712474619, 0, -1, 
            -15.0332963783729, -9.4339811320566, -9.05538513813742, -31.13, -28.57, -30.27, 
            0, 0, -0.679999999932)),
  row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
                19L, 20L, 21L, 22L, 23L, 24L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 
                46L, 47L, 48L),
  class = "data.frame"
)

绘图代码

effectBaseline <- ggplot(
  data = bdataPEV, 
  aes(x = variable, y = value, group = Electrode, color = subject)
) +
  geom_line() +
  geom_jitter(
    aes(shape = Electrode),
    size = 2,
    show.legend = TRUE,
    width = 0.1
  ) +
  labs(
    x = "",
    y = "PEV (dps)",
    title = "基线效应",
    subtitle = "UCL与T位点的PEV值"
  ) +
  theme_classic() +
  theme(
    axis.title = element_text(size = 8, face = "bold"),
    axis.text.x = element_text(face = "bold", size = 8, angle = 0),
    axis.text.y = element_text(face = "bold", size = 10, angle = 90),
    panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank()
  ) +
  geom_hline(yintercept = 0) +
  scale_x_discrete(labels = c("无基线", "有基线"))

# 输出绘图
print(effectBaseline)

关键参数说明

  • group = Electrode:确保同一电极的点在两个X分类间被线条连接
  • color = subject:让不同受试者的线条和点呈现不同颜色
  • shape = Electrode:用不同形状区分不同电极的数据点
  • geom_jitter(width = 0.1):避免同一X分类下的点重叠,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:50:43