我正在使用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)
答案 0 :(得分: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))
如果您有X2
的多个级别,那么您可以不对所有级别进行硬编码:
ggplot(NULL, aes(factor(X2), X1)) +
llply(unique(data$X2), function(i) geom_boxplot(width = w[i], data = subset(data, X2 == i)))
您也可以发布功能请求: https://github.com/hadley/ggplot2/issues
答案 1 :(得分:2)
ggplot2
(V 2.1.0)的当前版本现在包含varwidth
选项:
data <- data.frame(rbind(cbind(rnorm(700, 0,10), rep("1",700)),
cbind(rnorm(50, 0,10), rep("2",50))))
data$X1 <- as.numeric(as.character(data$X1))
ggplot(data = data, aes(x = X2, y = X1)) +
geom_boxplot(varwidth = TRUE)