如何绘制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
相关产品推荐
相关产品推荐

