2017-01-16 4 views
3

Ich versuche, die Breite des Barplotbalkens um meine Behältergröße (Spaltennamen) zu skalieren, um die Schiefe der Daten anzuzeigen (z. B. wird der 11-10 Behälter schmaler als der 251 sein -500 bin). Ich benutze einen Side-by-Side-Barplot und benutze rownames als meine Gruppen (A, B). Es scheint, dass das Argument width = nur die ersten beiden Breitenwerte verwendet und jeder Gruppe einen Wert zuweist, anstatt jedem einzelnen Balken die Breitenwerte zuzuweisen. Kann jemand einen Weg vorschlagen, dies zu tun?R nebeneinander Barplot, Maßstab nach Fachgröße

df <- rbind(runif(10,0,1), runif(10,0,1)) 
rownames(df) <- c("A", "B") 
colnames(df) <- c("0", "1-10", "11-20", "21-30", "31-40", "41-50", "51-75", "76-125", "126-250", "251-500") 
bar_width = rep(c(1, rep(10,5), 25, 50, 125, 250), each=2) 

barplot(df, width=bar_width, beside=T) 
+0

keine Antwort, aber dies könnte von Bedeutung sein - http://stackoverflow.com/questions/16482165/specify- spaces-between-bars-in-barplot/21421113 – thelatemail

+0

Streng genommen ist 'df' hier eine Matrix, kein data.frame, wie der Name schon sagt. – alistaire

+0

@thelatemail das ist hilfreich. Sieht immer noch ziemlich chaotisch aus, vielleicht gibt es einen besseren Weg? Ich sollte damit umgehen können. Danke – Tiffany

Antwort

1

Hier ist ein Versuch, in Plotten Basis R:

bp <- barplot(c(df), width=bar_width, 
     space=rep(c(40,0),ncol(df))/mean(bar_width), col=gray.colors(nrow(df))) 
axis(1, at=colMeans(matrix(bp,nrow=2)), labels=colnames(df), 
    lwd=0, lwd.tick=1, cex.axis=0.7, las=2) 

enter image description here

+0

das sieht gut aus, danke! – Tiffany