覆盖框图并使用ggplot添加一条线

时间:2014-07-30 09:18:20

标签: r ggplot2

我有一个像这样的数据框

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后再次开始)

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

enter image description here

2 个答案:

答案 0 :(得分:2)

您的前两个问题很容易解决。要覆盖箱图,您需要指定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) 

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

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

答案 1 :(得分:0)

如果将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)