带均值点的箱线图:为分类变量获得相同的顺序
boxplot with mean points: getting the same order for categorical variable
我想在 R 中显示具有 mean 值的箱线图。我的箱线图代表 6 个不同站点上的过氧化氢酶 activity,我想从北到南重新排序,最后有一个参考站点(N1、N2、M1、M2、S1、S2、R)。我可以像这样轻松地重新排序箱线图:
levels(data$site)
[1] "S2" "N1" "R" "N2" "S1" "M1" "M2"
x = factor(data$site,levels(data$site)[c(2,4,6,7,5,1,3)])
boxplot(catalase~x, data)
但是 mean 值不遵循新的顺序。
我这样称呼平均值:
means<-tapply(data$catalase, data$site, mean)
points(means, col="red", pch=19)
并尝试像这样重新排序:
reordered_means = factor(means,levels(means)[c(2,4,6,7,5,1,3)])
但显然这没有意义,因为它不起作用。
有什么建议吗?
你需要的不是
reordered_means = factor(means,levels(means)[c(2,4,6,7,5,1,3)])
但是
reordered_means = means[c(2,4,6,7,5,1,3)]
例子
## toy data: z ~ site
site <- gl(7 , 5, labels = c("S2", "N1", "R", "N2", "S1", "M1", "M2"))
set.seed(0); z <- round(rnorm(35), 2)
## re-level
piv <- c(2,4,6,7,5,1,3) ## pivoting index
x <- factor(site, levels(site)[piv])
## old mean before re-levelling
means <- tapply(z, site, mean)
## new mean after re-levelling
reordered_means <- means[piv]
# N1 N2 M1 M2 S1 S2 R
#-0.074 -0.370 -0.066 -0.226 0.206 0.788 -0.356
## we can verify this by computing from scratch
reordered_means <- tapply(z, x, mean)
# N1 N2 M1 M2 S1 S2 R
#-0.074 -0.370 -0.066 -0.226 0.206 0.788 -0.356
你只需要在你的数据集中重新排序后重新计算平均值(也可能纠正代码中的一些小错误)
data(mtcars)
mtcars$gear <- factor(mtcars$gear)
boxplot(mpg~gear, mtcars)
means=tapply(mtcars$mpg, mtcars$gear, mean)
points(means, col="red", pch=19)
mtcars$gear <- factor(mtcars$gear, levels=levels(mtcars$gear)[c(2,3,1)])
means=tapply(mtcars$mpg, mtcars$gear, mean)
boxplot(mpg~gear, mtcars)
points(means, col="red", pch=19)
我想在 R 中显示具有 mean 值的箱线图。我的箱线图代表 6 个不同站点上的过氧化氢酶 activity,我想从北到南重新排序,最后有一个参考站点(N1、N2、M1、M2、S1、S2、R)。我可以像这样轻松地重新排序箱线图:
levels(data$site)
[1] "S2" "N1" "R" "N2" "S1" "M1" "M2"
x = factor(data$site,levels(data$site)[c(2,4,6,7,5,1,3)])
boxplot(catalase~x, data)
但是 mean 值不遵循新的顺序。 我这样称呼平均值:
means<-tapply(data$catalase, data$site, mean)
points(means, col="red", pch=19)
并尝试像这样重新排序:
reordered_means = factor(means,levels(means)[c(2,4,6,7,5,1,3)])
但显然这没有意义,因为它不起作用。 有什么建议吗?
你需要的不是
reordered_means = factor(means,levels(means)[c(2,4,6,7,5,1,3)])
但是
reordered_means = means[c(2,4,6,7,5,1,3)]
例子
## toy data: z ~ site
site <- gl(7 , 5, labels = c("S2", "N1", "R", "N2", "S1", "M1", "M2"))
set.seed(0); z <- round(rnorm(35), 2)
## re-level
piv <- c(2,4,6,7,5,1,3) ## pivoting index
x <- factor(site, levels(site)[piv])
## old mean before re-levelling
means <- tapply(z, site, mean)
## new mean after re-levelling
reordered_means <- means[piv]
# N1 N2 M1 M2 S1 S2 R
#-0.074 -0.370 -0.066 -0.226 0.206 0.788 -0.356
## we can verify this by computing from scratch
reordered_means <- tapply(z, x, mean)
# N1 N2 M1 M2 S1 S2 R
#-0.074 -0.370 -0.066 -0.226 0.206 0.788 -0.356
你只需要在你的数据集中重新排序后重新计算平均值(也可能纠正代码中的一些小错误)
data(mtcars)
mtcars$gear <- factor(mtcars$gear)
boxplot(mpg~gear, mtcars)
means=tapply(mtcars$mpg, mtcars$gear, mean)
points(means, col="red", pch=19)
mtcars$gear <- factor(mtcars$gear, levels=levels(mtcars$gear)[c(2,3,1)])
means=tapply(mtcars$mpg, mtcars$gear, mean)
boxplot(mpg~gear, mtcars)
points(means, col="red", pch=19)