如何在多个 groups/condition 的箱线图中更改一个箱线图的宽度?
How to change width of one boxplot in boxplot with multiple groups/condition?
我是 R 的初学者,我试图制作一个箱线图,显示在两种不同情况下某种产品在不同时间点的肿瘤积累。我想到了下图:
Boxplot with multiple groups + condition
我使用了这个代码:
ggplot(tumor, aes(x=time_point, y=IA, fill=condition)) + ggtitle ("Tumor accumulation") + xlab("Time post-injection (h)") + ylab("%IA/kg") + geom_boxplot()+ geom_point(position=position_jitterdodge(0))+ scale_x_discrete(limits=c("2", "24", "96", "144")) + scale_fill_brewer(palette="Paired") + theme_minimal() + expand_limits(y=0)
因为没有条件C1和144h时间点的数据,所以最右边的方框外观要大很多。我似乎无法弄清楚如何在不改变其余部分的情况下更改这个单个框的宽度。
这应该能帮到你。首先,让我使用一个示例数据集和一个示例箱线图:
df <- data.frame(
samplename=c(rep("A", 10), rep("B1", 10), rep("B2", 10)),
grp=c(rep("Group A", 10), rep("Group B", 20)),
y=c(rnorm(10), rnorm(10, 0.2), rnorm(10, 0.35, 0.1))
)
ggplot(df, aes(grp, y)) +
geom_boxplot(aes(fill=grp, group=samplename))
这给了你一个类似于你的例子的情节。左边的框被展开以填满整个x美学,而右边的框被拆分(官方说法是"dodged")使得B1+B2的总和=B的宽度
要解决此问题,您可以使用 position_dodge()
函数中包含的 preserve='single'
参数,该参数必须应用于 geom_boxpot
的 position=
参数。这就是我的意思:
ggplot(df, aes(grp, y)) +
geom_boxplot(aes(fill=grp, group=samplename),
position=position_dodge(preserve='single'))
这通过使所有单独的框(闪避或其他方式)具有相同的宽度来解决宽度问题,但这也意味着属于 "Group A" 的框仍然向左闪避。在通过添加 position_dodge2()
(电影字幕:"The return of position_dodge!")解决之前,这是一个问题。只需将其替换为 position_dodge()
即可解决此问题,并且所有框都与其 x 轴值对齐:
ggplot(df, aes(grp, y)) +
geom_boxplot(aes(fill=grp, group=samplename),
position=position_dodge2(preserve='single'))
我是 R 的初学者,我试图制作一个箱线图,显示在两种不同情况下某种产品在不同时间点的肿瘤积累。我想到了下图:
Boxplot with multiple groups + condition
我使用了这个代码:
ggplot(tumor, aes(x=time_point, y=IA, fill=condition)) + ggtitle ("Tumor accumulation") + xlab("Time post-injection (h)") + ylab("%IA/kg") + geom_boxplot()+ geom_point(position=position_jitterdodge(0))+ scale_x_discrete(limits=c("2", "24", "96", "144")) + scale_fill_brewer(palette="Paired") + theme_minimal() + expand_limits(y=0)
因为没有条件C1和144h时间点的数据,所以最右边的方框外观要大很多。我似乎无法弄清楚如何在不改变其余部分的情况下更改这个单个框的宽度。
这应该能帮到你。首先,让我使用一个示例数据集和一个示例箱线图:
df <- data.frame(
samplename=c(rep("A", 10), rep("B1", 10), rep("B2", 10)),
grp=c(rep("Group A", 10), rep("Group B", 20)),
y=c(rnorm(10), rnorm(10, 0.2), rnorm(10, 0.35, 0.1))
)
ggplot(df, aes(grp, y)) +
geom_boxplot(aes(fill=grp, group=samplename))
这给了你一个类似于你的例子的情节。左边的框被展开以填满整个x美学,而右边的框被拆分(官方说法是"dodged")使得B1+B2的总和=B的宽度
要解决此问题,您可以使用 position_dodge()
函数中包含的 preserve='single'
参数,该参数必须应用于 geom_boxpot
的 position=
参数。这就是我的意思:
ggplot(df, aes(grp, y)) +
geom_boxplot(aes(fill=grp, group=samplename),
position=position_dodge(preserve='single'))
这通过使所有单独的框(闪避或其他方式)具有相同的宽度来解决宽度问题,但这也意味着属于 "Group A" 的框仍然向左闪避。在通过添加 position_dodge2()
(电影字幕:"The return of position_dodge!")解决之前,这是一个问题。只需将其替换为 position_dodge()
即可解决此问题,并且所有框都与其 x 轴值对齐:
ggplot(df, aes(grp, y)) +
geom_boxplot(aes(fill=grp, group=samplename),
position=position_dodge2(preserve='single'))