繁体   English   中英

用ggplot中的线连接分组点

[英]Connecting grouped points with lines in ggplot

我有一个具有两个分类条件的数据集(条件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)) 

在此处输入图片说明

(灵感来自@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 https://stackoverflow.com/questions/44656299/ggplot-connecting-each-point-within-one-group-on-discrete-x-axis
# ... 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))

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM