如何在一个图中绘制“多个箱线图”?

6

我有以下格式的数据:

  # repetition, packet, route, energy level
  1, 1, 1, 10.0
  1, 1, 2, 12.3
  1, 1, 3, 13.8
  1, 2, 1, 9.2
  1, 2, 2, 10.1
  1, 2, 3, 11.2
  ...
  50,99,3, 0.01

现在,我想创建一个图表,显示所有重复次数中每个路由的盒形图。例如,x轴将描述数据包,y轴将描述能量级别。第一个x轴刻度将显示三个包含三个子集数据的箱线图。
  subset(data, data$packet == 1 & data$route == 1)
  subset(data, data$packet == 1 & data$route == 2)
  subset(data, data$packet == 1 & data$route == 3)

等等。我正在使用ggplot2,想知道是否每次都要创建一个箱线图,然后尝试将它们合并,还是有更聪明的方法可以做到这一点?

提前感谢!M。


2
boxplot(y ~ x) 会为变量 y 绘制并排箱线图,按照 x 的唯一值进行分组。但由于这是纯粹的编程问题,不适合在此讨论,因此我已投票关闭并迁移到 stackoverflow。 - Macro
这有点复杂。不仅是一个变量y(能量)与x(路线)进行比较,还涉及到数据包(?)。 - michael
1个回答

8

如果您正在使用ggplot2,您可以使用facet_wrap非常好地完成此操作,它可以在一起创建多个箱线图。例如:

library(ggplot2)
mydata = data.frame(x=as.factor(rep(1:2, 5, each=5)), y=rnorm(50),
        division=rep(letters[1:5], each=10))

print(ggplot(mydata, aes(x, y)) + geom_boxplot() + facet_wrap(~division))

图片描述

针对你的代码,你似乎想要使用两个变量进行除法(有些不太清楚)。如果你想先按路径再按数据包进行除法(就像你的示例所示),你可以使用facet_grid

print(ggplot(data, aes(repetition, energy.level)) + geom_boxplot() + facet_grid(route ~ packet))

然而,请注意,由于您有99个数据包,这将导致图形宽度达到99个,因此您可能需要尝试不同的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接