所以我试图通过从一组基因制作盒子图来可视化我的数据,这样对于每个基因我都有不同菌株的不同盒子。数据看起来或多或少是这样的:
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个盒子(每个株子一个)。这可能是一个很好而且简单的方法,但到目前为止,我正在绘制一个空白......
感谢所有答案/建议,这一切都非常有用。
答案 0 :(得分:4)
以下是使用ggplot2
进行此操作的一种方法。
首先,我们将您的数据框传递给长格式:
library(reshape2)
dfm <- melt(df)
然后:
library(ggplot2)
ggplot(data=dfm) + geom_boxplot(aes(x=Strain,y=value)) + facet_wrap(~variable)
答案 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)
或其他方式合并为一个面板
bwplot(paste(Strain, Gene) ~ Expression, tab)