R:具有 2 个 X 变量的分组箱线图,在每组中比较所有样本与一个 X2 组

R: Grouped boxplot with 2 X-variables, in each group compare all samples vs. one X2 group

我正在尝试使用两个 x 变量在 ggplot2 中生成分组箱线图。这很简单

ggplot(boxplot_classes, aes(x=Group, y=Value, fill=Mutation)) + 
geom_boxplot(position=position_dodge(0.8))

但是,我不需要比较第二个 x 变量定义的两个子组,但对于第一个 x 变量定义的每个组,我需要将该组中的所有样本与来自第二个 x 变量。

举个例子。数据如下所示:

Value   Mutation    Group
32.00   Yes 1
5.00    no  1
18.00   no  1
3.00    no  1
16.00   no  1
14.00   Yes 1
28.00   Yes 1
28.00   Yes 1
49.00   Yes 1
15.00   Yes 1
43.00   no  2
49.00   Yes 2
40.00   Yes 2
17.00   Yes 2
9.00    no  2
31.00   Yes 2
8.00    Yes 2
43.00   no  2
50.00   Yes 2
48.00   Yes 2
11.00   Yes 3
42.00   no  3
0.00    Yes 3
15.00   Yes 3
8.00    no  3
1.00    Yes 3
41.00   no  3
15.00   no  3
4.00    no  3
31.00   Yes 3

我想生成一个图形,在每个 "Group" 中(在上面的示例中:1、2、3)生成了两个箱线图:一个用于此 "Group" 中的所有样本和一个仅适用于该组中的那些样本,它们也有突变=="Yes"。在真实数据中,更多"Groups are present".

我希望我能很好地解释我的问题。不幸的是,我不知何故错过了正确的语法或数据必须如何重新排列。

非常感谢您的帮助!

编辑:我在 https://s28.postimg.org/hvq8pb25p/Folie1.jpg

上传了我试图生成的图形示例

您有想要的示例情节吗?

您可以尝试组合使用 facet_grid() 或 facet_wrap() 和子集数据以获得 Mutation == Yes 部分。

试试这个:

plot_base<- ggplot(boxplot_classes, aes(x=data, y=Value, fill=Mutation)) + geom_boxplot(position=position_dodge(0.8)) + facet_grid(Mutation~Group)

查看 facet_grid 和 facet_wrap 的其他选项以进一步修改。

要获得 Mutation == Yes 部分:

plot_base %+% subset(boxplot_classes, Mutation %in% "Yes")

如果我们稍微研究一下您的数据,我们就能做到。假设你的数据在 dat:

dat_yes <- dat[dat$Mutation == 'Yes',] #subset only Yes
dat_yes$Mutation_2 <- 'Yes' #add column
dat$Mutation_2 <- 'All' #add column

dat_full <- rbind(dat, dat_yes) #put together

#plot
ggplot(dat_full, aes(x = factor(Group), y = Value))+
    geom_boxplot(aes(fill = Mutation_2))+
    xlab('Group') + 
    scale_fill_brewer(palette = 'Set1', name = 'Mutation')

首先,我们创建了一个名为 dat_yes 的数据子集,其中仅包含带有 Mutation == 'Yes' 的行。然后我们在 dat_yes 中创建一个名为 Mutation_2 的新列,它仅采用 'Yes' 的值。然后我们在您的原始数据中添加一个名为 Mutation_2 的列,它只采用 'All' 的值。然后,我们rbinddatdat_yes来创建dat_full。最后,我们将 dat_full 发送到 ggplot

数据

dat <- structure(list(Value = c(32, 5, 18, 3, 16, 14, 28, 28, 49, 15, 
43, 49, 40, 17, 9, 31, 8, 43, 50, 48, 11, 42, 0, 15, 8, 1, 41, 
15, 4, 31), Mutation = c("Yes", "no", "no", "no", "no", "Yes", 
"Yes", "Yes", "Yes", "Yes", "no", "Yes", "Yes", "Yes", "no", 
"Yes", "Yes", "no", "Yes", "Yes", "Yes", "no", "Yes", "Yes", 
"no", "Yes", "no", "no", "no", "Yes"), Group = c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L)), .Names = c("Value", 
"Mutation", "Group"), class = "data.frame", row.names = c(NA, 
-30L))