按两个条件分组的多个箱线图

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

为熊猫箱线图(groupby)设置无标题

Boxplot ggplot2:在分组箱线图中显示平均值和观察次数

使用 groupby 创建箱线图

GGPLOT箱线图按颜色细分,箱线图中间有平均值

用ggplot2画箱线图叠加图层后变成一个很奇怪的样子,求救求救?