9

積み上げ棒グラフをプロットしておりgeom_text、各スタックの値を挿入するために使用しています。私が直面している問題は、一部のスタックが非常に小さい/狭いため、2 つのスタックのテキストが互いに重なって読みにくいことです。たとえば、スタックごとにテキストの位置が交互になるようにテキストの位置を調整したいと思いhjust == 1ます。hjust == -1

これが私が現在行っていることの例です(以下dputmydf提供されています):

library(ggplot2)

ggplot(mydf, aes(x=variable, y = value, fill = Category)) + 
  geom_bar(stat="identity") +
  geom_text(aes(label = value, y = pos-(value/2)), size = 3) 

私がこれまでに試したことは次のとおりです。

position = position_dodge(width = 0.5)and but noneを使用するとposition = position_jitter(h =0.5, w = 0.5)、私がやろうとしていたことが起こりました。

私が最初に考えたのは、それがリサイクルされ、テキストが と の間でhjust = c(1,-1)交互になることを期待して定義することでしたが、エラー メッセージが表示されます。hjust == 1hjust == -1

Error: Incompatible lengths for set aesthetics: size, hjust

私も定義しようとsize = c(3,3,3,3,3,3,3,3,3), hjust = c(1,-1,1,-1,1,-1,1,-1,1)しましたが、これは同じエラーメッセージになります。

これを正しい方法で達成する方法についてのアドバイスをいただければ幸いです(他の提案も受け付けています)。

なぜ機能しdputなかったのかわかりませんでした(私にとっても機能しませんでした)ので、読み取り可能な形式のデータを次に示します。

    Category variable value   pos maxpos
1        AX       WW  47.8  47.8  184.1
2        AY       WW   5.6  53.4  184.1
3        AZ       WW  15.8  69.2  184.1
4        BX       WW  31.4 100.6  184.1
5        BY       WW  11.7 112.3  184.1
6        BZ       WW  10.7 123.0  184.1
7        CX       WW   2.2 125.2  184.1
8        CY       WW  21.4 146.6  184.1
9        CZ       WW  37.5 184.1  184.1
10       AX       SM  39.8  39.8  148.6
11       AY       SM   2.9  42.7  148.6
12       AZ       SM  13.2  55.9  148.6
13       BX       SM  22.7  78.6  148.6
14       BY       SM   7.3  85.9  148.6
15       BZ       SM   8.9  94.8  148.6
16       CX       SM   1.6  96.4  148.6
17       CY       SM  17.3 113.7  148.6
18       CZ       SM  34.9 148.6  148.6
19       AX     AsIs 156.9 156.9  519.0
20       AY     AsIs  13.1 170.0  519.0
21       AZ     AsIs  70.5 240.5  519.0
22       BX     AsIs  72.6 313.1  519.0
23       BY     AsIs  30.7 343.8  519.0
24       BZ     AsIs  35.6 379.4  519.0
25       CX     AsIs   5.2 384.6  519.0
26       CY     AsIs  44.8 429.4  519.0
27       CZ     AsIs  89.6 519.0  519.0
4

1 に答える 1

14

変数を作成するhjustことで、目的の結果を得ることができます。コード:

mydf$hj <- rep(c(1,0,-1), length.out=27)

ggplot(mydf, aes(x=variable, y=value, fill=Category)) + 
  geom_bar(stat="identity") +
  geom_text(aes(label=value, y=pos-(value/2), hjust=hj), size=4)

与える: ここに画像の説明を入力


@konvasによって提案されたわずかに代替のソリューション:

ggplot(mydf, aes(x=variable, y=value, fill=Category)) + 
  geom_bar(stat="identity") +
  geom_text(aes(label=value, y=pos-(value/2), hjust=rep(c(1,0,-1), length.out=length(value))), size=4)
于 2014-07-08T09:03:24.237 に答える