ggplot2箱线图的宽度

23

我试图制作两个单独的图表,想要将它们并排呈现在我的海报上(我需要使它们分开,不能使用facet_wrap)。其中一个图表有几个箱线图,而第二个图表只有一个。当我将这两个图表并排放置时,如何操纵箱线图的宽度,使第二个箱线图与图表1中任何一个单独箱线图的宽度相同?以下是可重现的示例:

tvalues <- sample(1:10000,1200)
sex <- c(rep('M',600),rep('F',600))
region <- c('R1','R2','R3','R4','R5')
df1 <- data.frame(tvalues,sex,region)

tvalues2 <- sample(1:10000,200)
sex2 <- sample(c('M','F'),200,replace=T)
region2 <- 'R6'
df2 <- data.frame(tvalues2,sex2,region2)

p1 <- ggplot(data=df1,aes(x=region,y=tvalues,color=sex)) + 
geom_boxplot(width=0.5)
p2 <- ggplot(data=df2,aes(x=region2,y=tvalues2,color=sex2)) + 
geom_boxplot(width=0.5)

图1 图1:

图2 图2:

2个回答

25

我建议将第二张图中框的宽度除以第一张图中region类别的数量。

p2 <- ggplot(data=df2,aes(x=region2,y=tvalues2,color=sex2)) + 
geom_boxplot(width=0.5/length(unique(df1$region)))

输入图像描述


4

如果只有一个箱线图,就像以下示例:

a<- data.frame(obs=rep("A", 50),
       value=rnorm(50, 100, 50))

ggplot(a, aes(y=value))+
geom_boxplot()

宽箱线图

我们可以建立一个虚假的x/y轴,设定轴限制,这样geom_boxplot()函数的width选项就能决定箱子的宽度。

ggplot(a, aes(y=value, x=0))+
geom_boxplot(width=0.7) + 
xlim(-1,1)

更紧凑的箱线图

您可以添加以下代码来移除所有x轴文本和刻度

theme(theme(axis.title.x = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())


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