每行数据的Boxplot

时间:2015-01-14 11:47:11

标签: r loops matrix boxplot

我在R.工作。我有三个矩阵:d1,d2,d3,并希望从矩阵的每一行产生一个箱线图。像这样:boxplot(d1[1,], d2[1,], d3[1,])

如何自动生成矩阵每一行的绘图。我需要循环吗?申请功能可以帮助我吗?另外,在一个绘图窗口中绘制12个箱线图会很棒。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

您只需在转置矩阵上调用boxplot

# Create some faux data
x <- matrix(rnorm(50), 5, 10, dimnames = list(LETTERS[1:5], letters[1:10]))

# Transpose and plot
boxplot(t(x), col = rainbow(5))

Imgur

答案 1 :(得分:1)

这是我想你想要的一个可重复的例子。假设你有三个4x40矩阵:

set.seed(1)
d1 <- matrix(rnorm(40), nrow = 4)
d2 <- matrix(rnorm(40), nrow = 4)
d3 <- matrix(rnorm(40), nrow = 4)

您应首先整理您的数据,例如堆叠它们并添加一列:

d <- rbind(t(d1), t(d2), t(d3))
d <- cbind(d, rep(1:3, each = 10))

现在你可以绘制三个第一个colunmns箱图:

boxplot(d[, 1] ~ d[, 5])

boxplot 1

如果你想为每个矩阵使用四个,你可以使用一个循环:

par(mfrow=c(4,1))
for (i in 1:4){
  boxplot(d[, i] ~ d[, 5])  
}
par(mfrow=c(1,1))

boxplot 2

但是,如果你想要更令人印象深刻的图形,可以尝试使用lattice或ggplot2包。

希望这有帮助

答案 2 :(得分:0)

# your matrices (you have 5 variables and 20 observations per matrix, so you'll have to transpose)
m1 <- matrix(rnorm(100), 5, 20)
m2 <- matrix(rnorm(100), 5, 20)
m3 <- matrix(rnorm(100), 5, 20)

# tidy data
library(reshape2)
Df <- melt(list(data.frame(t(m1)), data.frame(t(m2)), data.frame(t(m3))))

# boxplot
library(ggplot2)
ggplot(data = Df, aes(L1, value, color = factor(L1))) + geom_boxplot() + facet_wrap(~variable)

enter image description here