在R和ggplot2中绘制同一x位置的两个箱线图

11

我想在R中使用ggplot2将多个箱线图上下堆叠而不是并排绘制。这里是一个例子:

library("ggplot2")
set.seed(1)
plot_data<-data.frame(loc=c(rep(1,200),rep(2,100)),
                      value=c(rnorm(100,3,.5),rnorm(100,1,.25),2*runif(100)),
                      class=c(rep("A",100),rep("B",100),rep("C",100)))
ggplot(plot_data,aes(x=loc,y=value,group=class)) +
       geom_boxplot(fill=c("red","green","blue"))

这导致以下绘图:

example plot

如您所见,蓝色的箱线图以其loc值(2.0)为中心,而红色和绿色的箱线图仅有一半的宽度,并分别在它们共享的loc值(1.0)的左侧和右侧绘制。 我想使它们的宽度与蓝色的相同,并将它们直接垂直排列在一起。

我该如何实现这个目标?

请注意,我确定要可视化的数据不会重叠,就像给出的示例数据一样。

2个回答

14

使用 position = "identity"

ggplot(plot_data,aes(x=loc,y=value,group=class)) +
       geom_boxplot(fill=c("red","green","blue"),position = "identity")

enter image description here

geom_boxplot 的默认设置是使用 position = "dodge"


4
主要讨论如下:这里 简而言之,您可以使用geom_boxplot(position=position_dodge(0))。 您可以通过指定不同的'position_dodge'值来设置盒子之间的距离。

虽然它的阅读性不如 @joran 建议的 position="identity" 那么清晰,但是 position=position_dodge(0) 似乎是等效的。 - mschilli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接