在ggplot中是否有与plot中的varwidth选项等效的?

N B*_*wer 9 plot r ggplot2

我正在使用ggplot创建箱图,并希望表示对每个箱子有贡献的样本大小.在基本plot功能中有varwidth选项.它在ggplot中是否具有等价物?

例如,在基础图中

data <- data.frame(rbind(cbind(rnorm(700, 0,10), rep("1",700)),
                         cbind(rnorm(50, 0,10), rep("2",50))))
data[ ,1] <- as.numeric(as.character(data[,1]))
plot(data[,1] ~ as.factor(data[,2]), varwidth = TRUE)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

koh*_*ske 7

不优雅但你可以通过以下方式做到:

data <- data.frame(rbind(cbind(rnorm(700, 0,10), rep("1",700)),
                         cbind(rnorm(50, 0,10), rep("2",50))))
data[ ,1] <- as.numeric(as.character(data[,1]))
w <- sqrt(table(data$X2)/nrow(data))
ggplot(NULL, aes(factor(X2), X1)) + 
  geom_boxplot(width = w[1], data = subset(data, X2 == 1)) +
  geom_boxplot(width = w[2], data = subset(data, X2 == 2))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果你有几个级别X2,那么你可以不用硬编码所有级别:

ggplot(NULL, aes(factor(X2), X1)) + 
  llply(unique(data$X2), function(i) geom_boxplot(width = w[i], data = subset(data, X2 == i)))
Run Code Online (Sandbox Code Playgroud)

您还可以发布功能请求:https: //github.com/hadley/ggplot2/issues