R语言ggplot2如何增大分组箱线图的组间间距
ggplot2 调整分组箱线图主组间距方案
你当前代码无法拉开组间距的核心原因是:将箱线宽度、同组元素的偏移宽度都设为1,让不同v1分组的图形元素完全占满了x轴分配的坐标区间,没有预留空隙。
调整方法
统一调小箱线宽度和位置偏移的宽度参数,让每个主组的图形元素不占满分配到的横向空间,自然会留出组间距,修改后可直接运行的代码如下:
library(ggplot2) v1 <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2) v2 <- c(0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2) v3 <- c(13,67,89,280,40,1,23,99,32,1,75,280,270,200,196,300,320, 277,23,4,1,2,5,89,45,23,11,1,3,23,43,90,1,7,250,200,100,11,6,6,123,12, 86,11,300,299,320,190,170,150,344,244,123,234,45) # 注意:不建议把数据框命名为summary,会覆盖R基础函数 plot_df <- data.frame(v1 = as.factor(v1), v2 = as.factor(v2), v3) ggplot(plot_df, aes(x = v1, y = v3, fill = v2)) + geom_boxplot(width = 0.7, size = 0.4, position = position_dodge(width = 0.7)) + geom_dotplot(binaxis='y', stackdir='center', binwidth=5, position = position_dodge(width = 0.7))
参数调整说明
- 上述代码里
geom_boxplot()的width参数、两个图层position_dodge()里的width参数必须保持一致,否则箱线和点会错位。 - 这两个统一的width值越小,每个v1主组的图形越窄,组间的空隙就越大,你可以根据自己的需求改成0.5、0.6等数值调整间距大小。
- 如果想要更直观的间距控制,可以替换为
position_dodge2()函数,通过padding参数直接设置组间留白比例,取值范围0~1,值越大空隙越大,示例代码:
ggplot(plot_df, aes(x = v1, y = v3, fill = v2)) + geom_boxplot(width = 0.7, size = 0.4, position = position_dodge2(padding = 0.3)) + geom_dotplot(binaxis='y', stackdir='center', binwidth=5, position = position_dodge2(padding = 0.3))
效果参考

图中箭头标注的v1=0和v1=2组之间的空隙,可通过上述参数自由调整大小
内容的提问来源于stack exchange,提问作者undefinedquestions
相关产品推荐
相关产品推荐

