由因子组成的矩阵的Boxplot

时间:2013-12-20 15:21:34

标签: r boxplot

我想从矩阵创建一个箱形图,其中几个变量按因子的两个级别分组。

一些示例数据:

mymatrix = structure(list(Treatment = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 
1L, 2L, 1L, 2L, 2L), .Label = c("con", "treat"), class = "factor"), 
c1 = c(13L, 93L, 6L, 3L, 45L, 1L, 69L, 38L, 23L, 48L, 82L
), c5 = c(33L, 79L, 3L, 5L, 17L, 22L, 94L, 99L, 85L, 74L, 
9L), c3 = c(96L, 52L, 0L, 6L, 60L, 14L, 69L, 96L, 57L, 99L, 
39L), c8 = c(40L, 27L, 94L, 68L, 76L, 73L, 88L, 45L, 67L, 
95L, 85L), c12 = c(20L, 14L, 53L, 9L, 93L, 1L, 12L, 45L, 
59L, 38L, 25L)), .Names = c("Treatment", "c1", "c5", "c3", 
"c8", "c12"), class = "data.frame", row.names = c("1a", "1b", 
"2a", "2b", "3a", "3b", "4a", "4b", "5a", "5b", "5c"))

我能够获得每个变量的箱线图,但我无法同时对它们进行分组:

boxplot(as.matrix(mymatrix[,2:6]))
boxplot(as.matrix(mymatrix[,2:6])~Treatment, data=mymatrix)

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

v <- stack(mymatrix[-1])
v$Treatment <- mymatrix$Treatment
boxplot(values~Treatment+ind, v)

第一部分会给我们data.frame这样的话:

   values ind
1      13  c1
2      93  c1
...
11     82  c1
12     33  c5
...
22      9  c5
23     96  c3
...
55     25 c12

然后我们追加Treatment列,并照常插图。

使用reshapeas suggested by Drew

更新

v <- melt(mymatrix, id.vars="Treatment")
boxplot(value~Treatment+variable, v)

答案 1 :(得分:2)

就个人而言,我喜欢使用ggplot2 / reshape2方法 - 一开始学习起来可能有点困难,但一旦你擅长它,我认为它会让事情变得更容易。< / p>

请注意,您的“矩阵”实际上不是矩阵,而是数据帧。这很方便,因为我建议的方法只适用于数据框。

str(mymatrix)
'data.frame':   11 obs. of  6 variables:
...

首先,将'重塑'为'long'格式,其中每行代表不同的观察

dfm <- melt(mymatrix, id.vars="Treatment")

(我的惯例是附加任何带有字母m的融化数据框)。

接下来,使用ggplot2制作图表。我已将Treatment列映射到x轴,并将c1-c12列(重新整形后命名为variable)映射到填充颜色,但ggplot2的语法允许您轻松更改它:

ggplot(dfm, aes(x=Treatment, y=value, fill=variable)) + 
  geom_boxplot()

enter image description here