我有一个包含两个分类条件的数据集(条件 A 具有级别 A1 和 A2,条件 B 具有级别 B1 和 B2)。每个测量对象提供四个数据点,一个数据点对应两种条件的每种组合。
我已经绘制了各个数据点(添加了一些抖动),并希望连接每个主题在 A 的每个级别的两个点(因此将每个红点与示例图中属于同一主题的相邻绿松石点连接起来) 。我尝试过使用 geom_line(),但未能指定线连接 A 同一级别的点。可能有一些使用facet_grid() 而不是分组的解决方案,但由于这只是更复杂的绘图的一部分,我更喜欢有一个保持分组的解决方案。
d <- data.frame(id=as.factor(rep(1:100, each=4)),
A=rep(c("A1", "A1", "A2", "A2"), 100),
B=rep(c("B1", "B2", "B1", "B2"), 100),
y=runif(400))
ggplot(d, aes(x=A, y=y, col=B)) + geom_point(position=position_jitterdodge(.5))
Run Code Online (Sandbox Code Playgroud)
(受到@aosmith在这里对类似问题的回答的启发)
我建议在 ggplot 之前进行抖动——这样点和线都可以使用相同的点。
library(dplyr)
d_jit <- d %>%
# position on x axis is based on combination of B and jittered A. Mix to taste.
mutate(A_jit = as.numeric(B)*0.5 - 0.75 + jitter(as.numeric(A), 0.5),
grouping = interaction(id, A))
# Trick borrowed from /sf/ask/3125940961/
# ... x-axis defined using A and geom_blank, but added layers use A_jit
ggplot(d_jit, aes(x=A, y=y, group = grouping)) +
geom_blank() +
geom_line(aes(A_jit), alpha = 0.2) +
geom_point(aes(A_jit, col=B))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1995 次 |
| 最近记录: |