Grouped Boxplots

时间:2016-05-30 13:43:24

标签: r boxplot

我有数据框,我想绘制分组的箱图。这是数据的一部分。

a <- c(0, 100, 250, 500, 750, 0, 100, 250, 500, 750, 0, 100, 250, 500, 750)
b <- c(2.646, 3.756, 26.270, 30.997, 39.294,  2.646, 3.756, 26.270, 30.997, 39.294, 16.363, 25.950, 38.913,45.000, 47.698)
c <- c(0.0, 0.5, 0.1, 5.8, 21.9, 0.0, 0.5, 0.1, 5.8, 21.9, 9.7. 12.5, 25.1, 29.3, 31.9)
d <- c(14.7, 15.0, 13.8, 18.4, 28.2, 14.7, 15.0, 13.8, 18.4, 28.2, 23.6, 24.0, 25.7, 29.0, 33.1)

我合并了向量以获得如下数据帧。

data <- cbind(a, b, c, d)

然后我尝试将b,c和d的三个值的boxplot作为a的函数如下。

boxplot(b~a, c~a, d~a, data = data)

但我无法得到所需的分组箱图,这是每个&#34; a&#34;的每个值的三个箱图。但是我可以得到每个&#34; a&#34;的值的箱线图。如果我这样做:

boxplot(b~a, data = data)

我的分组箱图有什么问题?

2 个答案:

答案 0 :(得分:1)

首先以长格式而不是宽格式创建数据集。

wide <- data.frame(
  a = c(0, 100, 250, 500, 750, 0, 100, 250, 500, 750, 0, 100, 250, 500, 750),
  b = c(2.646, 3.756, 26.270, 30.997, 39.294,  2.646, 3.756, 26.270, 30.997, 39.294, 16.363, 25.950, 38.913,45.000, 47.698),
  c = c(0.0, 0.5, 0.1, 5.8, 21.9, 0.0, 0.5, 0.1, 5.8, 21.9, 9.7, 12.5, 25.1, 29.3, 31.9),
  d = c(14.7, 15.0, 13.8, 18.4, 28.2, 14.7, 15.0, 13.8, 18.4, 28.2, 23.6, 24.0, 25.7, 29.0, 33.1)
)
library(reshape2)
long <- melt(wide, id.vars = "a")

然后将a转换为可用于定义组的因子

long$a <- factor(long$a)

最后你可以用ggplot2

绘制这个
library(ggplot2)
ggplot(long, aes(x = a, y = value, colour = variable)) + geom_boxplot()

resulting figure

答案 1 :(得分:0)

这基本上是Thierry的解决方案,但是使用boxplot(long$value ~ long$a + long$variable)而不是ggplot,一旦你用melt()转换为long并分解了a。这是一个不同的分组。

boxplot