2016-09-14 4 views
1

ich dieses Balkendiagramm haben:gestapelt geom_bar Ausgabe mit gestapelten Balken und Etiketten verlegt

group = c("A","A","B","B") 
value = c(25,-75,-40,-76) 
day = c(1,2,1,2) 
dat = data.frame(group = group , value = value, day = day) 

ggplot(data = dat, aes(x = group, y = value, fill = factor(day))) + 
    geom_bar(stat = "identity", position = "identity")+ 
    geom_text(aes(label = round(value,0)), color = "black", position = "stack") 

enter image description here

und ich würde die Balken gestapelt mögen und die Werte zu zeigen. Wenn ich den obigen Code ausführe, ist die -76 nicht an der richtigen Stelle (und auch nicht die 75, wie es scheint).

Haben Sie eine Idee, wie die Zahlen am richtigen Ort angezeigt werden?

+0

Sie sollten ihr Augenmerk auf die Warnung zahlen: 'Warnmeldung: Stapeln nicht gut definiert, wenn ymin = 0 'heißt Sie eine verwirrende Diagramm machen!. – alistaire

+0

Warum verwenden Sie 'position =" identity "' in 'geom_bar', wenn Sie möchten, dass die Balken gestapelt werden? – Axeman

+0

Auch @alistaire, ich bekomme diese Warnung nicht, läuft '2.1.0.9000'. – Axeman

Antwort

1
ggplot(data=dat, aes(x=group, y=value, fill=factor(day))) + 
    geom_bar(stat="identity", position="identity")+ 
    geom_text(label =round(value,0),color = "black")+ 
    scale_y_continuous(breaks=c(-80,-40,0)) 

enter image description here

+1

OP würde "wie die Bars gestapelt". Wenn Sie nicht zustimmen, sollten Sie das zumindest in der Antwort erklären. – Axeman

0

eine Mischung aus negativen und positiven Werten ist für ggplot2 schwierig Stacking. Am einfachsten ist es, den Dataset in zwei Teile aufzuteilen, einen für positive und einen für negative. Fügen Sie dann Strichlayer getrennt hinzu. Ein klassisches Beispiel ist here.

Sie können das Gleiche mit dem Text tun, indem Sie eine Textschicht für die positiven y-Werte und eine für die Negative hinzufügen.

dat1 = subset(dat, value >= 0) 
dat2 = subset(dat, value < 0) 

ggplot(mapping = aes(x = group, y = value, fill = factor(day))) + 
    geom_bar(data = dat1, stat = "identity", position = "stack")+ 
    geom_bar(data = dat2, stat = "identity", position = "stack") + 
    geom_text(data = dat1, aes(label = round(value,0)), color = "black", position = "stack") + 
    geom_text(data = dat2, aes(label = round(value,0)), color = "black", position = "stack") 

enter image description here

Wenn die derzeit Entwicklungsversion von ggplot2 (2.1.0.9000) verwendet wird, die Stapel scheint nicht richtig in geom_text für negative Werte zu arbeiten. Sie können die Textpositionen jederzeit "von Hand" berechnen lassen.

library(dplyr) 
dat2 = dat2 %>% 
    group_by(group) %>% 
    mutate(pos = cumsum(value)) 

ggplot(mapping = aes(x = group, y = value, fill = factor(day))) + 
    geom_bar(data = dat1, stat = "identity", position = "stack")+ 
    geom_bar(data = dat2, stat = "identity", position = "stack") + 
    geom_text(data = dat1, aes(label = round(value,0)), color = "black") + 
    geom_text(data = dat2, aes(label = round(value,0), y = pos), color = "black") 
Verwandte Themen