10

ファセット内で、そのバケットに分類される観測値のパーセンテージで棒グラフに注釈を付けようとしています。この質問は、この質問と非常に密接に関連してい ます。カテゴリ変数のグラフでカウントの代わりに%を表示しますが、ファセットの導入によりしわが発生します。関連する質問への答えは、テキストgeomを含むstat_binを使用してから、ラベルを次のように作成することです。

 stat_bin(geom="text", aes(x = bins,
         y = ..count..,
         label = paste(round(100*(..count../sum(..count..)),1), "%", sep="")
         )

これは、ファセットのないプロットでは問題なく機能します。ただし、ファセットの場合、この合計(..count ..)は、ファセットに関係なく、観測値のコレクション全体を合計しています。以下のプロットは問題を示しています---パネル内でパーセンテージの合計が100%にならないことに注意してください。

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

上記の図の実際のコードは次のとおりです。

 g.invite.distro <- ggplot(data = df.exp) +
 geom_bar(aes(x = invite_bins)) +
 facet_wrap(~cat1, ncol=3) +
 stat_bin(geom="text", aes(x = invite_bins,
         y = ..count..,
         label = paste(round(100*(..count../sum(..count..)),1), "%", sep="")
         ),  
         vjust = -1, size = 3) +
  theme_bw() + 
scale_y_continuous(limits = c(0, 3000))

更新:リクエストに応じて、問題を再現する小さな例を次に示します。

df <- data.frame(x = c('a', 'a', 'b','b'), f = c('c', 'd','d','d'))
ggplot(data = df) + geom_bar(aes(x = x)) +
 stat_bin(geom = "text", aes(
         x = x,
         y = ..count.., label = ..count../sum(..count..)), vjust = -1) +
 facet_wrap(~f)

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

4

1 に答える 1

11

アップデート geom_barが必要stat = identityです。

ggplot の呼び出し以外で要約を取得する方が簡単な場合があります。

df <- data.frame(x = c('a', 'a', 'b','b'), f = c('c', 'd','d','d'))

# Load packages
library(ggplot2)
library(plyr)

# Obtain summary. 'Freq' is the count, 'pct' is the percent within each 'f'
m = ddply(data.frame(table(df)), .(f), mutate, pct = round(Freq/sum(Freq) * 100, 1)) 

# Plot the data using the summary data frame
ggplot(data = m, aes(x = x, y = Freq)) + 
   geom_bar(stat = "identity", width = .7) +
   geom_text(aes(label = paste(m$pct, "%", sep = "")), vjust = -1, size = 3) +
   facet_wrap(~ f, ncol = 2) + theme_bw() +
   scale_y_continuous(limits = c(0, 1.2*max(m$Freq)))

ここに画像の説明を入力

于 2012-07-19T21:57:45.653 に答える