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

13

我正在使用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()

输入图像描述

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

3) ...当 varwidth = TRUE 时,我得到了什么

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

输入图像描述

不管我在调用ggplotgeom_boxplot语句时使用color = group2还是group = group2,似乎都会出现这种重叠。尝试使用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)手动调整组合组之间的间距,使得第一级分组内的框更加紧密。


这并不是解决所述问题的方案,但我想补充一点,拥有重叠的箱子可能从理解的角度来看更好,因为您可以精确地比较宽度,而无需在头脑中测量。为了查看两个图,我会在这里使用alpha参数而不是geom_boxplot(varwidth = T, alpha = 0.5)ggplot(data = data, aes(y = response, x = group1, color = group2)) + geom_boxplot(varwidth = T, alpha = 0.5) - Chris
请看下面我的解决方案。 - TClavelle
3个回答

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

不完全是我想要的 - 我想避免使用 facets,但是它确实有效。谢谢!我会等一下看看是否有人可以在一个 facet 中完成图表。否则,赏金就归你了。 - Rufo

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)

我是一个新用户,无法内联发布图片。图1


0

这个问题已经在这里得到了解答 ggplot增加箱线图之间的距离

答案涉及使用geom_boxplot()position = position_dodge()参数。

对于您的示例:

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(position = position_dodge(1))

enter image description here


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