2016-09-30 5 views
0

Wie kann ich nach innen zeigende Balkenbeschriftungen in einem Balkendiagramm mit positiven und negativen Werten in ggplot2 einstellen? I.e. Die Balkenbeschriftungen sollten der 0-Achse zugewandt sein."Einwärts" -Balkenbeschriftungen in einem Balkendiagramm mit negativen Werten mit 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" ist obviously nicht der Weg zu gehen, denn „nach innen und außen in Bezug auf die physikalische Mitte des Grundstücks sind, nicht, wo die 0 Achsen“.

Update:

geom_bar inward

+0

Ist 'geom_text (VJust = c (1, 1, 1, 0), Nudge_y = c (-0.1, -0.1, -0.1, 0.4), Farbe = 'rot') 'etwas wie du willst? – hrbrmstr

+0

@hrbrmstr: Im Prinzip ja, das Aussehen ist in Ordnung (gut, ich würde lieber (-) 0,05 für alle "Nudge_y" Werte verwenden, aber das ist nur Optik). Mein Hauptanliegen ist jedoch, dass ich so viele Graphen erstellen möchte und dass ich jeden Graphen abhängig von den Werten der Variablen manuell anpassen muss. Also insgesamt nicht ganz. – dpprdan

Antwort

2

Sie sollten die vjust innerhalb der aes Zuordnungen einzustellen Lage anders, hier für jede Zeile zu steuern, je nachdem, ob es positiv oder negativ ist:

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

Wenn Sie die Etiketten um mo verschieben möchten wieder gerade (statt nur vjust = 0 oder vjust = 1, die Sie von einem logischen bekommen kann), können Sie Sie Positionen ifelse und definieren genauer verwenden können:

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

Schön! Beide setzten das 'vjust =' in das 'aes()' (wussten nicht, dass dies möglich war und erlaubte, dass die rhs ausgewertet werden) und das 'outcome> 0 '. Ich denke nur über eine Möglichkeit nach, die Etiketten etwas nach innen zu drücken. (Ich weiß nicht, wie ich das besser sagen soll, aber auf meinem Rechner scheinen alle Beschriftungen auf Pixelreihen nach unten geschoben zu sein, so dass die letzte Pixelzeile am unteren Rand der - 0,5 nicht auf der Leiste steht, sondern Auf der weißen Linie sehen Sie die Grafik, die ich dem Beitrag hinzugefügt habe.) – dpprdan

+0

Siehe Edit für ein Beispiel für feinere Kontrolle. Spielen Sie mit den Optionen in "ifelse", wenn Sie es in beide Richtungen etwas weiter drücken möchten. –

+0

'ifelse' natürlich! Nett, danke! – dpprdan

Verwandte Themen