2017-09-27 8 views
0

私はggplot2を使用して100%積み重ね棒グラフをRで作成しようとしています。私がそれをやろうとすると、グラフの反対側のラベルだけを使って小さな棒が得られます。私は棒の数で通常の棒グラフを得ることができます、そして、私はパーセンテージを得る方法で既にここに多くの質問があることを知っていますが、私が探しているもののような答えを見つけていません。 これは仕事のためですが、いくつかのモックのデータは次のようになります。私は棒グラフおよびデータラベルを取得することができ、このコードで100%積み重なった棒グラフデータラベルはパーセントではありません

dat <- read.table(text = "assessment User N 
missingcomma Sara 5 
notcapitolized Sara 2 
noindent Sara 1 
missingcomma Jason 1 
notcapitolized Jason 3 
noindent Jason 4 
missingcomma Andre 3 
notcapitolized Andre 1 
noindenet Andre 2", header = TRUE) 

ggplot(dat, aes(x = assessment, y = N, fill = User)) + 
    geom_bar(stat = "identity") + 
    geom_text(aes(label = N), position = position_stack(vjust = 0.5)) + 
    coord_flip() 

棒グラフ&ラベル:

このコードでは、私のラベルをどこにも置かずに100%スタックされたグラフを得ることができます。

ggplot(dat, aes(x = assessment, y = N, fill = User)) + 
    geom_bar(stat = "identity", position = "fill") + 
    geom_text(aes(label = N), position = position_stack(vjust = 0.5)) + 
    coord_flip() 

100%狂気のラベル/ wのチャートを積上げ:

助けてください、それははるかに高く評価されるだろう。

+0

この回答はお役に立ちましたか? – treysp

答えて

0

ラムナートの回答の「古いバージョンのggplot」のように、グループごとにテキストの位置を計算する必要があると思います:Showing data values on stacked bar chart in ggplot2

ave()機能がassessment内の各グループのために、である:彼らその合計から各カウント値を減算position = "fill"

  • なかった場合

    1. 積層バーの総高さを計算するcumsum()を使用して、
    2. position = "fill"がy軸の範囲[0、1]に正規化するため、グループの合計数で正規化します。

    ggplot(dat) + geom_col(aes(x = assessment, y = N, fill = User), position = "fill") + geom_text(aes(x = assessment, y = ave(dat$N, dat$assessment, FUN = function(x) (cumsum(x) - 0.5 * x)/sum(x)), label = N)) + coord_flip()

    ggplot

  • 関連する問題