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

时间:2016-12-30 20:11:01

标签: r ggplot2 lattice

我正在尝试使用两个x变量在ggplot2中生成一个分组的boxplot。

是直截了当的
ggplot(boxplot_classes, aes(x=Group, y=Value, fill=Mutation)) + 
geom_boxplot(position=position_dodge(0.8))

但是,我不需要比较第二个x变量定义的两个子组,但对于第一个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

我想生成一个数字,在每个“组”中(在上面的示例中:1,2,3)生成两个箱图:一个用于此“组”中的所有样本,一个仅用于那些样本中的这个群体也有突变==“是”。在真实数据中,还有更多“群体存在”。

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

非常感谢您的帮助!

编辑:我上传了我想在https://s28.postimg.org/hvq8pb25p/Folie1.jpg

生成的数字示例

2 个答案:

答案 0 :(得分:2)

如果我们稍微使用您的数据,我们就可以做到。假设您的数据位于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的{​​{1}}中创建一个新列,仅取Mutation_2的值。然后,我们在名为'Yes'的原始数据中添加一列,其中只有Mutation_2的值。然后,我们'All' rbinddat创建dat_yes。最后,我们将dat_full发送给dat_full

enter image description here

数据

ggplot

答案 1 :(得分:0)

你有一个你想要的示例情节吗?

您可以尝试使用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的其他选项以进一步修改。

获得变异==是部分:

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