【问题标题】:Boxplot of a matrix by factor矩阵的箱线图(按因子)
【发布时间】:2013-12-20 15:21:34
【问题描述】:

我想从一个矩阵创建一个箱线图,该矩阵包含多个变量,这些变量按两个水平的因子分组。

一些示例数据:

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)

提前感谢您的帮助。

【问题讨论】:

  • 有没有办法让代码对每个人都更具可读性?
  • @LoïcFaure-Lacroix:这是将 R 数据发布到 SO 的首选方式。它不容易阅读,但您可以将其复制并粘贴到您的 R 控制台中并准确地重现该对象。
  • @DrewSteen 不熟悉 R。谢谢会记住这一点。

标签: r boxplot


【解决方案1】:
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)

【讨论】:

  • 谢谢你解决了这个问题。实际上想要绘制的是:boxplot(values~Treatment + ind, v)
【解决方案2】:

就我个人而言,我喜欢使用ggplot2/reshape2 方法 - 一开始学习可能有点困难,但一旦你熟练了,我认为它会让事情变得容易得多。

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

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

首先,将其“重塑”为“长”格式,其中每一行代表不同的观察结果

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多