每行数据的箱线图
Boxplot for each row of a data
我在 R 中工作。我有三个矩阵:d1、d2、d3,我想从矩阵的每一行生成一个箱线图。像这样:boxplot(d1[1,], d2[1,], d3[1,])
。
如何才能自动为矩阵的每一行生成绘图。我需要一个循环吗?应用功能可以帮助我吗?此外,在一次绘图 window 中绘制 12 个箱线图会很棒。
感谢您的帮助!
您可以在转置矩阵上调用 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))
这是我认为您想要的可重现示例。假设你有三个 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))
现在您可以绘制前三列箱线图:
boxplot(d[, 1] ~ d[, 5])
如果每个矩阵需要四个,可以使用循环:
par(mfrow=c(4,1))
for (i in 1:4){
boxplot(d[, i] ~ d[, 5])
}
par(mfrow=c(1,1))
但是,如果您想要更令人印象深刻的图形,请尝试 lattice 或 ggplot2 包。
希望对您有所帮助
# 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)
我在 R 中工作。我有三个矩阵:d1、d2、d3,我想从矩阵的每一行生成一个箱线图。像这样:boxplot(d1[1,], d2[1,], d3[1,])
。
如何才能自动为矩阵的每一行生成绘图。我需要一个循环吗?应用功能可以帮助我吗?此外,在一次绘图 window 中绘制 12 个箱线图会很棒。 感谢您的帮助!
您可以在转置矩阵上调用 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))
这是我认为您想要的可重现示例。假设你有三个 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))
现在您可以绘制前三列箱线图:
boxplot(d[, 1] ~ d[, 5])
如果每个矩阵需要四个,可以使用循环:
par(mfrow=c(4,1))
for (i in 1:4){
boxplot(d[, i] ~ d[, 5])
}
par(mfrow=c(1,1))
但是,如果您想要更令人印象深刻的图形,请尝试 lattice 或 ggplot2 包。
希望对您有所帮助
# 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)