次のような「積み上げ」棒グラフで個々の「ブロック」にラベルを付ける簡単な方法はありますか。ラベルを各ブロックの上部近くに配置したいのですが、私の最新のアプローチでは、以下のように、米国とメキシコのテキストをなんとか交換することになります。
解決策を探しているy
と、テキストの値を外部で事前に計算する必要があるアプローチしか見つかりませんでした。これは、余分なロジックは別として、ブロックがスタックされる順序を制御するという問題をもたらします...また、このスタックオーバーフローの質問
を見つけました。ここで、を使用することを思いつきました (以下のコードを参照)
。これは、現在のアプローチを説明するために切り詰められたコードスニペットです。私は必ずしもこのスニペットを修正しようとしているわけではありません。スタック棒グラフ領域にラベルを付けるための一般的なイディオムならどれでもかまいません。
編集:(この質問がこれまでに得た2つの答えを考慮して)私はむしろ事前計算を意味しない解決策を望んで
いることを強調したいと思いますgeom="text"
stat_bin
テキストのy位置。
# sample data source
df.StackData <- data.frame(
QType = c("A4-1", "A4-1", "A4-1", "B3", "B3", "B3"),
Country = c("Canada", "USA", "Mexico", "Canada", "USA", "Mexico"),
NbOfCases = c(1000, 1320, 380, 400, 1000, 812),
AvgRate = c(17.2, 11.4, 44.21, 17.3, 15.3, 39.7),
Comment = c("Can", "US", "Mex", "Can", "US", "Mex")
)
およびggplotの呼び出し。ラベルの奇妙な交換を使用して、上記のグラフを生成します(また、追加の凡例もありますが、この凡例の問題は簡単に処理できます。この質問の準備中に注意しました)。
ggplot(data=df.StackData,
aes(x=QType, y=NbOfCases, fill=Country))+
geom_bar(stat="identity", width=1) +
stat_bin(geom="text", aes(label=paste("R coef =",
formatC(AvgRate, format="f", digits=3),
"(", Comment, ")" ),
vjust=1.5, size=3
)
)
私の最初の試みでは、次のようにgeom_text()をグラフに追加しましたが、もちろんyの値は間違っていました(個々のブロックの下部ではなく、グラフの下部を基準にしてテキストを配置します)...
... +
geom_text(mapping=aes(x=QType, y=NbOfCases,
label=paste("R coef =",
formatC(AvgRate, format="f", digits=3),
"(", Comment, ")" ),
vjust=1.5),
size=3)