具有交叉分类组的ggplot中的箱线图宽度

N B*_*wer 13 r ggplot2

我正在使用ggplot制作箱图,其数据按2个因子变量分类.我想让盒子尺寸反映样品尺寸,varwidth = TRUE但是当我这样做时盒子会重叠.

1)具有3×2结构的一些样本数据

data <- data.frame(group1= sample(c("A","B","C"),100, replace = TRUE),group2= sample(c("D","E"),100, replace = TRUE) ,response = rnorm(100, mean = 0, sd = 1))
Run Code Online (Sandbox Code Playgroud)

2)默认的箱形图:没有可变宽度的ggplot

ggplot(data = data, aes(y = response, x = group1, color = group2)) + geom_boxplot()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我喜欢如何显示第一级分组.
现在我尝试添加可变宽度......

3)......以及我什么时候得到的 varwidth = TRUE

ggplot(data = data, aes(y = response, x = group1, color = group2)) + geom_boxplot(varwidth = T)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

无论是在主要调用中还是在语句中使用color = group2group = group2同时出现这种重叠.大惊小怪似乎也没有帮助.ggplotgeom_boxplotposition_dodge

4)我不喜欢的解决方案是通过组合我的group1和group2来制作独特的因素

data$grp.comb <- paste(data$group1, data$group2)

ggplot(data = data, aes(y = response, x = grp.comb, color = group2)) + geom_boxplot()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我更喜欢将事物分组以反映交叉分类

5)前进的方向:我想要a)弄清楚如何 varwidth = TRUE不使盒子重叠或b)手动调整组合组之间的空间,使第一级分组内的盒子更靠近.

RHA*_*RHA 2

我认为使用 可以最好地解决您的问题facet_wrap

    library(ggplot2)
    data <- data.frame(group1= sample(c("A","B","C"),100, replace = TRUE), group2= 
    sample(c("D","E"),100, replace = TRUE) ,response = rnorm(100, mean = 0, sd = 1))

    ggplot(data = data, aes(y = response, x = group2, color = group2)) + 
      geom_boxplot(varwidth = TRUE) +
      facet_wrap(~group1)
Run Code Online (Sandbox Code Playgroud)

这使: 在此输入图像描述