ggplot2中group美学映射失效,如何实现预期的折线图分组?
问题原因
你当前的group = factor(REP)只按重复组REP分组,这会把不同ID下的同一REP数据归为一组。比如REP=1包含ID=A的TIME1-3和ID=B的TIME1-3,ggplot会把这些点连在一起,导致同一TIME对应的不同ID点之间出现竖线,这就是你看到的异常图形。
解决方案
要实现每个ID对应2个重复组的4条折线,需要按ID和REP的组合来分组,因为每个独立折线是ID+REP的唯一组合(A1、A2、B1、B2)。可以用以下两种方式实现:
方式1:使用interaction()组合分组变量
直接在group美学映射中用interaction(ID, REP),它会自动把两个变量的所有组合生成唯一分组:
library(tidyverse) df = data.frame(ID = rep(c("A", "B"), each = 6), TIME = rep(1:3, times = 4), REP = rep(c(1,2,1,2), each = 3), MEASURE = c(10,5,2,20,10,4,15,3,1,8,4,1)) ggplot(df, aes(x = TIME, y = MEASURE, color = ID)) + geom_line(aes(group = interaction(ID, REP)))
方式2:提前创建分组变量
先在数据框里生成一个新的分组列,再用这个列做group映射:
df <- df %>% mutate(group_id = paste(ID, REP, sep = "-")) ggplot(df, aes(x = TIME, y = MEASURE, color = ID)) + geom_line(aes(group = group_id))
效果说明
两种方式都能生成4条独立折线:ID=A对应2条(REP1和REP2),ID=B对应2条(REP1和REP2),颜色按ID区分,不会出现异常竖线,和用linetype分组的预期效果一致。
内容的提问来源于stack exchange,提问作者AmyM
相关产品推荐
相关产品推荐

