列和行组的多个框图

时间:2013-09-30 08:43:00

标签: r plot boxplot

所以我试图通过从一组基因制作盒子图来可视化我的数据,这样对于每个基因我都有不同菌株的不同盒子。数据看起来或多或少是这样的:

Strain  gene1         gene2      gene3  .   .   .
 A    2.6336700     1.42802     0.935742
 A    2.0634700     2.31232     1.096320
 A    2.5798600     2.75138     0.714647
 B    2.6031200     1.31374     1.214920
 B    2.8319400     1.30260     1.191770
 B    1.9796000     1.74199     1.056490
 C    2.4030300     1.20324     1.069800
 C    1.4829864     5.570571    12.29139
 C    0.7212928     6.070519    11.63530
 .
 .
----------

因此,对于这个例子,我想获得3张不同的图片(每个基因一张),每张图片应该包含3个盒子(每个株子一个)。这可能是一个很好而且简单的方法,但到目前为止,我正在绘制一个空白......


感谢所有答案/建议,这一切都非常有用。

2 个答案:

答案 0 :(得分:4)

以下是使用ggplot2进行此操作的一种方法。

首先,我们将您的数据框传递给长格式:

library(reshape2)
dfm <- melt(df)

然后:

library(ggplot2)
ggplot(data=dfm) + geom_boxplot(aes(x=Strain,y=value)) + facet_wrap(~variable)

enter image description here

答案 1 :(得分:3)

lattice包非常适合此类分组。我总是发现使用它比ggplot2更容易。您也可以使用老式的基础R“ink-on-paper-method”(link)来完成它,虽然它有点手动。

首先你需要重塑数据框(顺便说一下这个步骤使用juba建议的reshape2包做得更好,但我会保留我的解决方案)。

str <- "Strain  gene1         gene2      gene3
 A    2.6336700     1.42802     0.935742
 A    2.0634700     2.31232     1.096320
 A    2.5798600     2.75138     0.714647
 B    2.6031200     1.31374     1.214920
 B    2.8319400     1.30260     1.191770
 B    1.9796000     1.74199     1.056490
 C    2.4030300     1.20324     1.069800
 C    1.4829864     5.570571    12.29139
 C    0.7212928     6.070519    11.63530"

tab <- read.table(con <- textConnection(str), header=TRUE)
tab <- data.frame(Strain=tab$Strain, stack(tab[-1]))

names(tab) <- c("Strain", "Expression", "Gene")

然后绘制

library(lattice)
bwplot(Expression ~ Strain | Gene, tab)

enter image description here

或其他方式合并为一个面板

bwplot(paste(Strain, Gene) ~ Expression, tab)

enter image description here