9

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)

ここに画像の説明を入力してください

4

2 に答える 2

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

于 2012-09-29T05:31:54.757 に答える
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) 

ggplot2からの出力プロットの例

于 2016-03-02T14:42:27.187 に答える