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".
我希望我能很好地解释我的问题。不幸的是,我不知何故错过了正确的语法或数据必须如何重新排列。
非常感谢您的帮助!
上传了我试图生成的图形示例
您有想要的示例情节吗?
您可以尝试组合使用 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'
的值。然后,我们rbind
dat
和dat_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))
我正在尝试使用两个 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".
我希望我能很好地解释我的问题。不幸的是,我不知何故错过了正确的语法或数据必须如何重新排列。
非常感谢您的帮助!
上传了我试图生成的图形示例您有想要的示例情节吗?
您可以尝试组合使用 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'
的值。然后,我们rbind
dat
和dat_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))