2016-09-30 68 views
0

ggplot2の正と負の値を棒グラフで内向きの棒のラベルに設定するにはどうすればよいですか?私。バーのラベルは0軸を向いている必要があります。ggplot2で負の値を持つ棒グラフの「内向き」のバーのラベル

df <- data.frame(trt = c("a", "b", "c", "d"), 
       outcome = c(2.3, 1.9, 0.5, -0.5)) 

ggplot(df, aes(trt, outcome, label = outcome)) + 
    geom_bar(stat = "identity", 
      position = "identity") + 
    geom_text(vjust = "inward", color = 'red') 

vjust = "inward"「内外物理プロットの中央ではなく、ここで0軸があるに対するものである」ので、obviously進むべき道ではありません。

更新:

geom_bar inward

+0

は 'geom_textです(= cでvjust:正確に(だけではなくvjust = 0またはvjust = 1あなたが論理から得ることができるの)、あなたはifelseを使用することができ、より正確にあなたの位置を定義し直します0,1、0)、nudge_y = c(-0.1、-0.1、-0.1、0.4)、color = 'red') 'あなたの後ろのようなもの? – hrbrmstr

+0

@hrbrmstr:原理的には、外見はうまくいきます。(よく、すべてのnudge_y値に( - )0.05を使用したいと思いますが、それは単なる光学です)。しかし、私が心配しているのは、このようなグラフをたくさん作成したいから、変数の値に応じてグラフを手作業で調整しなければならないということです。だから全体的に、かなりではありません。 – dpprdan

答えて

2

あなたは行ごとに別々に制御することがaesマッピングの内部vjustを設定することができるはず、ここではそれが正または負であるかどうかに基づいて:

ggplot(df, aes(trt, outcome, label = outcome)) + 
    geom_bar(stat = "identity", 
      position = "identity") + 
    geom_text(aes(vjust = outcome > 0) 
      , color = 'red') 

enter image description here

moの周りのラベルを移動する場合は、1(

ggplot(df, aes(trt, outcome, label = outcome)) + 
    geom_bar(stat = "identity", 
      position = "identity") + 
    geom_text(aes(vjust = ifelse(outcome > 0 
           , 1.5, -0.5)) 
      , color = 'red' 
      ) 

enter image description here

+0

ニース!両方とも、 'aes()'に 'vjust ='を入れて(これが可能であり、rhsを評価できるようにしたことを知らなかった)、 'outcome> 0'も同様です。私はちょっと内側にラベルを押し込む方法について考えているだけです。 (私はこれをよりうまく言う方法はわかりませんが、私のマシンではすべてのラベルが一番下の行にプッシュされているように見えるので、-0.5の最後のピクセルの最後の行はバーにはありません投稿に追加したグラフを参照してください。) – dpprdan

+0

細かいコントロールの例は編集を参照してください。いずれかの方向にもう少し押したい場合は、 'ifelse'の選択肢で遊んでください。 –

+0

もちろん 'ifelse'!よかった、ありがとう! – dpprdan

関連する問題