2013-12-19 8 views
11

geom_bar scheint am besten zu funktionieren, wenn es feste Balken hat - auch die Abstände zwischen den Balken scheinen durch die Breite zu bestimmen, laut documentation. Wenn Sie variable Breiten haben, reagiert es jedoch nicht wie erwartet, was zu Überlappungen oder Lücken zwischen den verschiedenen Balken führt (wie gezeigt here).Wie man variable Balkenbreiten in ggplot2 nicht überlappt oder Lücken macht

Um zu sehen, was ich meine, versuchen Sie dieses sehr einfach reproduzierbares Beispiel:

x <- c("a","b","c") 
w <- c(1.2, 1.3, 4) # variable widths 
y <- c(9, 10, 6) # variable heights 

ggplot() + 
geom_bar(aes(x = x, y = y, width = w, fill=x), 
stat="identity", position= "stack") 

Was ich wirklich will, ist für die verschiedenen Bars nur berühren zu sein, aber nicht überlappen, wie in einem Histogramm.

Ich habe versucht, position= "stack", "dodge" und "fill hinzuzufügen, aber keine Arbeit. Liegt die Lösung in geom_histogram oder verwende ich einfach nicht geom_bar richtig?

geom-plot overlap

P. S. Um das Problem mit Lücken zu sehen, ersetzen Sie 4 durch 0.5 in dem obigen Code und sehen Sie das Ergebnis.

Antwort

14

scheint, dass es keine einfache Lösung ist, so sollten wir x-Achse als kontinuierliche hinsichtlich w und manuell berechnen erforderlichen Positionen für Zecken und bar Zentren (this ist nützlich) behandeln:

# pos is an explicit formula for bar centers that we are interested in: 
#  last + half(previous_width) + half(current_width) 
pos <- 0.5 * (cumsum(w) + cumsum(c(0, w[-length(w)]))) 
ggplot() + 
    geom_bar(aes(x = pos, width = w, y = y, fill = x), stat = "identity") + 
    scale_x_continuous(labels = x, breaks = pos) 

enter image description here

+0

, die das Problem löst, vielen dank. Vielleicht sollte eine Funktion für ggplot2-Entwickler als Positionsoption hinzugefügt werden? – RobinLovelace

+0

@RobinLovelace, kein Problem. Vielleicht könntest du versuchen, [frag] (https://github.com/hadley/ggplot2/issues) nach einem zu fragen. – Julius

+0

Danke für den Rat. Ich tat wie für dieses https://github.com/hadley/ggplot2/issues/890, aber kann nicht auf der ggplot Probleme Seite sehen. Scheint entfernt worden zu sein - irgendwelche Ideen? – RobinLovelace

Verwandte Themen