2016-11-16 1 views
1

Ich würde gerne einen gestapelten Balken zu einem ausgewichenen Balkendiagramm hinzufügen, zeigt die Gesamtzahl. Ich möchte nicht, dass die Spalte für die Summe ein fester Balken ist, sondern aus den gestapelten Komponenten besteht. Ich kann beide Geom_bars zum Plot hinzufügen, aber ich konnte den gesamten Balken nicht bewegen. Ich könnte eine Dummy-Kategorie mit Null in der Mitte hinzufügen, aber natürlich würde ich bevorzugen, dass die Summe rechts von den Komponenten ist.ausgewechselt Balkendiagramm mit Stack für die Gesamt

df=data.frame(
    treatment=rep(c("Impact","Control")), 
    type=rep(c("Phylum1","Phylum2"),each=2), 
    total=c(2,3,4,5)) 

ggplot(df,aes(y=total,x=treatment,fill=type)) + 
    geom_bar(position= position_dodge(),stat="identity", alpha = 0.9, width = 0.25) + 
    geom_bar(position = position_stack(), stat = 'identity', alpha = 0.3, width = 0.125) 

not precisely what I want

This ist nicht die gleiche Frage, die sie/ausweichen durch zwei Variablen stapeln möchten. Ich möchte nur die gleichen Informationen zweimal zusammenfassen, aber anders.

Ich kann natürlich einen Balken für die feste Summe hinzufügen und in die gestapelte Leiste von Hand einfügen, aber ich komme so nah mit dem grundlegenden ggplot, dass ich dachte, vielleicht ein wenig hacken (zB das Rückgabeobjekt von position_stack modifizieren) möglich.

+0

[Dies] (https://stackoverflow.com/questions/30021410/ggplot2-side-by-side-barplot-with-one-bar-stacked-and-the-other -nicht? noredirect = 1 & lq = 1) könnte verwandt sein, aber ich denke, dass du dein Dataset umgestalten musst. – aosmith

+0

@aosmith Yeah Ich sah das, sollte es verlinkt haben. Es ist im Grunde das Gegenteil von dem, was ich will (weiche eine feste Summe neben dem Stapel aus, während ich eine gestapelte Summe neben die ausgewichenen Komponenten legen möchte). – Ruben

+0

Ich bin mir nicht sicher, ob ich deine Handlung verstehe. Sie haben zwei Werte für jeden "Typ" für jede "Behandlung", aber Sie können nur den größten Wert für jede Kombination in Ihrem Diagramm sehen. Ist es das was du willst? – aosmith

Antwort

3

Sie könnten Ihr Dataset umformen und Facetten verwenden, um den Effekt zu erhalten, obwohl dies alle Ihre Daten und nicht nur den größten Wert in jeder Kombination zeigt.

Ihr Datensatz müsste zweimal wiederholt werden, einmal für das Original type und einmal für die Darstellung der Summen. Sie brauchen auch eine neue Variable, die ich genannt habe.

df$type2 = df$type 
df2 = df 
df2$type2 = "Total" 

Stapel die beiden Datensätze zusammen über rbind und dann plotten type2 als den x-Variable und das Alpha-Variable.

ggplot(rbind(df, df2), aes(y = total, x = type2, fill = type, alpha = type2)) + 
    geom_col(width = .9) + 
    facet_wrap(~treatment, strip.position = "bottom") + 
    scale_alpha_manual(values = c(.9, .9, .3), guide = "none") + 
    theme(strip.background = element_blank(), 
      axis.text.x = element_blank(), 
      axis.ticks.length = unit(0, "mm"), 
      panel.spacing = unit(0, "mm"), 
      panel.grid.major.x = element_blank()) + 
    scale_x_discrete(expand = c(1, 0)) 

enter image description here

+0

Danke, macht viel Sinn, nur eine zweite Gruppierung var zu verwenden und alles zu stapeln, ich werde es morgen bei der Arbeit ausprobieren. Das Alpha-Zeug sollte nur zeigen, wie es mit meinem Ansatz überlagert ist. – Ruben

+1

Habe es schließlich zu Hause ausprobiert. Es funktioniert großartig. Eine kleine Verbesserung: Wenn Sie möchten, dass die Balken von unten nach oben stapeln, wie sie von links nach rechts ausweichen, kehren Sie die Reihenfolge des "type" -Faktors um. – Ruben

+0

Entschuldigung, ich habe meinen Kommentar über die facet_wrap Streifenrichtung gelöscht. Ich habe es herausgefunden. Ich dachte, Winkel ist relativ zum Standardwinkel, stellt sich heraus, es ist absolut. Also 'Winkel = 180' war was ich brauchte, wenn die Facettenstreifen auf der linken Seite waren. – Ruben