【问题标题】:Overlay box plots and add a line using ggplot使用 ggplot 叠加箱线图并添加一条线
【发布时间】:2015-10-21 18:07:08
【问题描述】:

我有一个这样的数据框

data = as.data.frame(data.table::rbindlist(PLOTS))

head(data)
    Y              X     dep_C1

   3.96655960      0     184
  -8.71308460      0     184
 -11.11638947      0     184
  -6.84213562      11    184
  -1.25926609      11    184
  -4.60649529      11    184
   0.27577858      11    184
  11.85394249      20    184
  -0.27114563      20    184
   1.73081284      20    184
   1.78209915      20    184
  11.34305840      20    184
  13.49688263      20    184
  -7.54752045      20    184
 -13.63673286      25    184
  -5.75711517      25    184
   0.35823669      25    184
  -2.45237694      25    184
   0.49313087      0     66
  -9.04148674      0     66
 -15.50337906      0     66
 -17.51445351      0     66
 -10.66807098      0     66
  -2.24337845      5     66
 -13.79929533      5     66
   1.33287125      5     66
   2.22143402      5     66
  11.46484833      10    66
  23.26805916      10    66
   9.07377968      10    66
   4.28664665      10    66

我正在尝试为两个 dep_C1 值创建两个箱形图并覆盖它们。我试过这个

ggplot(data, aes(x=factor(X), y=Y, colour = factor(dep_C1))) 
+ geom_boxplot(outlier.size=0,fill = "white") 
+ stat_summary(fun.y=median, geom="line", aes(group=1,colour = factor(dep_C1)),size=2)

这是我的问题

1) 两个箱形图并排,不重叠

2) 在中位数之间画一条线的命令不起作用:线条应该连接同一组箱线图的中位数(只有一个箱线图可以)

3)x轴上的数值乱了(96后又开始系列)

有人可以帮我解决这些问题吗?提前致谢

【问题讨论】:

  • 好吧,您能否说明问题 #2:我理解正确吗,您希望连接同一组的箱线图?您能否添加一个可重现的示例(可能带有图片),“OK”是什么意思?
  • 至 #3:例如,为什么数据没有在点 0 处合并到单个箱线图中?

标签: r ggplot2


【解决方案1】:

您的前两个问题很容易解决。要覆盖箱线图,您需要指定position="identity",可能类似于alpha=0.5。对于线路,组应为group=factor(dep_C1)。这将如下所示:

ggplot(data, aes(x=factor(X), y=Y, colour = factor(dep_C1)))  +
 geom_boxplot(outlier.size=0, fill = "white", position="identity", alpha=.5)  +
 stat_summary(fun.y=median, geom="line", aes(group=factor(dep_C1)), size=2) 

对于第三个问题,您使用的是factor(X),它定义了轴的比例。您可以使用scale_x_discrete 更改此比例。也许您正在寻找类似以下的内容:

scale_x_discrete(limits=seq(min(data$X), max(data$X)))

【讨论】:

    【解决方案2】:

    如果将 X 转换为连续比例而不是因子,则可以最好地解决第三个问题;但是,要制作箱线图,您需要 group = interaction(time, group)aes

    ggplot(data_frame_test, aes(x=time, y=Value, colour = factor(group), group = interaction(time, group)))  +
     geom_boxplot(outlier.size=0, fill = "white", position="identity", alpha=.5)  +
     stat_summary(fun.y=median, geom="line", aes(group=factor(group)), size=2)
    

    【讨论】: