我可能会以不同的方式处理这个问题,并使用geom_segment
反而:
df1 <- as.data.frame(with(df,cbind(embed(score.after.resp,2),embed(question,2))))
colnames(df1) <- c('yend','y','xend','x')
df1$col <- ifelse(df1$y - df1$yend >= 0,'Decrease','Increase')
ggplot(df1) +
geom_segment(aes(x = x,y = y,xend = xend,yend = yend,colour = col)) +
geom_point(data = df,aes(x = question,y = score.after.resp))
简要说明:
我在用着embed
将 x 和 y 变量转换为每个线段的起点和终点,然后简单地添加一个变量来指示每个线段是向上还是向下。然后我使用之前的数据框来添加原始点本身。
或者,我想你可以使用geom_line
像这样的东西:
df$resp1 <- c(as.character(df$resp[-1]),NA)
ggplot(df,aes(x = question, y = score.after.resp, color=factor(resp1),group = 1)) +
geom_line() + geom_point(color = "black")