按两个条件分组的多个箱线图
Posted
技术标签:
【中文标题】按两个条件分组的多个箱线图【英文标题】:multiple boxplots grouped by two conditions 【发布时间】:2012-10-18 22:57:06 【问题描述】:我在单个情节中制作多个箱线图时遇到了真正的麻烦...... 我有五个变量,三个是数字,两个是因子。我想要所有三个数值变量的箱线图,但按两个因子变量分组......该图应该有两组,每个组用于低和高,三个框用于 MM、ND 和 BB。图例应包含 MM、ND 和 BB 的缩写。
Group Class Sal Wal Daa
MM Low 21 34 4
ND Low 23 65 3
BB High 21 34 2
MM High 25 23 4
MM High 23 23 5
MM High 13 54 6
MM High 56 32 4
MM Low 34 13 3
ND Low 12 35 7
ND Low 34 34 2
ND Low 54 54 1
ND High 32 34 6
ND High 43 32 7
BB Low 54 13 3
BB Low 12 56 2
BB Low 45 34 6
BB High 32 32 3
BB High 13 12 2
BB High 54 12 5
【问题讨论】:
【参考方案1】:如果您想为每个数值变量分别绘制一组箱线图,可以使用interaction()
函数按组和类对变量进行分组:
test.data <- data.frame(Sal=rnorm(100),
group=factor(sample(LETTERS[1:3], 100, replace=TRUE)),
class=factor(sample(c("low","high"), 100, replace=TRUE)))
boxplot(Sal ~ interaction(group,class), data=test.data)
【讨论】:
interaction
不是必需的,boxplot(Sal ~ group + class)
将完全一样
我要添加组的“视觉分离”,只需添加boxwex=0.2, at=c(0.4, 1, 1.6, 3.4, 4, 4.6)
【参考方案2】:
您需要先重新排列数据:
dta <- read.table(text="Group Class Sal Wal Daa
MM Low 21 34 4
ND Low 23 65 3
BB High 21 34 2
MM High 25 23 4
MM High 23 23 5
MM High 13 54 6
MM High 56 32 4
MM Low 34 13 3
ND Low 12 35 7
ND Low 34 34 2
ND Low 54 54 1
ND High 32 34 6
ND High 43 32 7
BB Low 54 13 3
BB Low 12 56 2
BB Low 45 34 6
BB High 32 32 3
BB High 13 12 2
BB High 54 12 5", header=TRUE)
dtaLong <- stack(dta, select=cbind(Sal, Wal, Daa))
dtaLong <- data.frame(dtaLong, dta[,1:2])
现在 ind 是从原始数据集中的三个变量中识别值的新因子。
library(lattice)
bwplot(values~ind | Group + Class, data=dtaLong)
【讨论】:
以上是关于按两个条件分组的多个箱线图的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 按类别分组箱线图以比较 3 个数据集 Matplotlib