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

时间:2014-08-13 20:32:50

标签: r ggplot2

我正在制作带有ggplot的箱图,其数据按2个因子变量分类。我希望盒子大小通过varwidth = TRUE反映样本大小,但是当我这样做时,框重叠。

1)一些具有3 x 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))

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

ggplot(data = data, aes(y = response, x = group1, color = group2)) + geom_boxplot()

enter image description here

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

3)......以及varwidth = TRUE

时得到的结果
ggplot(data = data, aes(y = response, x = group1, color = group2)) + geom_boxplot(varwidth = T)

enter image description here

无论是在color = group2的主要调用还是group = group2语句中,我都会使用ggplotgeom_boxplot,这种重叠似乎会发生。使用position_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()

enter image description here

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

5)前进之路: 我想要a)弄清楚如何使varwidth = TRUE不使框重叠或b)手动调整组合组之间的空间,以便第一级分组中的框更接近。

3 个答案:

答案 0 :(得分: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)

给出了: enter image description here

答案 1 :(得分:1)

最近对ggplot2的更新使得@N Brouwer在(3)中提供的代码按预期工作:

# library(devtools)
# install_github("tidyverse/ggplot2")

packageVersion("ggplot2") # works with v2.2.1.9000
library(ggplot2)
set.seed(1234)
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 = group1, color = group2)) + 
  geom_boxplot(varwidth = T)

(我是新用户,无法在线发布图片) fig 1

答案 2 :(得分:0)

此问题已在ggplot increase distance between boxplots

中得到解答

答案涉及使用position = position_dodge()的{​​{1}}参数。

对于你的例子:

geom_boxplot()

enter image description here