我正在制作带有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)
无论是在color = group2
的主要调用还是group = group2
语句中,我都会使用ggplot
或geom_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()
我更喜欢将事物分组以反映交叉分类
5)前进之路:
我想要a)弄清楚如何使varwidth = TRUE
不使框重叠或b)手动调整组合组之间的空间,以便第一级分组中的框更接近。
答案 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)
答案 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()