Gestapeltes Histogramm aus bereits zusammengefassten Zählern mit ggplot2

8

Ich hätte gerne Hilfe beim Einfärben eines ggplot2-Histogramms, das aus bereits zusammengefassten Zähldaten erzeugt wurde.

Die Daten sind so etwas wie # Anzahl Männer und # Frauen, die in verschiedenen Bereichen leben. Es ist einfach genug, das Histogramm für die Gesamtanzahl (d. H. Männer + Frauen) zu zeichnen:

%Vor%

Ich möchte jedoch jeden Balken nach dem relativen Beitrag von C1 und C2 farbig gestalten, so dass ich das gleiche Histogramm (dh die Balkenhöhen insgesamt) wie im obigen Beispiel bekomme, plus ich sehe den Anteil vom Typ " C1 "und" C2 "Personen wie in einem gestapelten Balkendiagramm.

Vorschläge für eine saubere Möglichkeit, dies mit ggplot2 zu tun, verwenden Sie Daten wie "X" im Beispiel?

    
Paul J Hurtado 05.03.2013, 18:14
quelle

3 Antworten

9

Sehr schnell können Sie mit der Option stat="identity" und dem Paket plyr das tun, was das OP möchte, um das Histogramm manuell zu berechnen:

%Vor%

Wir machen im Grunde nur eine "mids" -Spalte, um die Spalten zu lokalisieren und dann zwei Plots zu machen: eins mit der Zählung für die Summe (C) und eins mit den Spalten, angepasst an die Anzahl einer der Spalten (C1 ). Sie sollten in der Lage sein, von hier aus anzupassen.

Update 1 : Ich habe festgestellt, dass ich einen kleinen Fehler bei der Berechnung der Mitten gemacht habe. Jetzt behoben. Außerdem weiß ich nicht, warum ich eine 'ddply'-Anweisung verwendet habe, um die Mitten zu berechnen. Das war albern. Der neue Code ist klarer und prägnanter.

Update 2 : Ich kam zurück, um einen Kommentar zu sehen und bemerkte etwas Erschreckendes: Ich benutzte Summen als Histogrammfrequenzen. Ich habe den Code ein bisschen aufgeräumt und auch Vorschläge aus den Kommentaren zur Farbsyntax hinzugefügt.

    
Dinre 05.03.2013, 20:29
quelle
6

Hier ist ein Hack mit ggplot_build . Die Idee ist, zuerst Ihre alte / ursprüngliche Handlung zu bekommen:

%Vor%

gespeichert in p . Verwenden Sie dann ggplot_build(p)$data[[1]] , um die Daten zu extrahieren, insbesondere die Spalten xmin und xmax (um die gleichen Breaks / binwidths des Histogramms zu erhalten) und count column (um den Prozentsatz um count zu normalisieren) Code:

%Vor%

Wie kann ich jetzt Daten generieren? Was ich von deinem Beitrag verstehe, ist dies. Nehmen Sie zum Beispiel den ersten Balken in Ihrem Grundstück. Es hat eine Anzahl von 2 und erstreckt sich von xmin = 147 bis xmax = 156.8 . Wenn wir X für diese Werte überprüfen:

%Vor%

Hier berechne ich (91+86)/(154+156)*(count=2) = 1.141935 und (63+70)/(154+156) * (count=2) = 0.8580645 als die beiden normalisierten Werte für jeden von uns erzeugten Balken.

%Vor%

Und das ist die ursprüngliche Handlung:

Und das ist was ich bekomme:

Bearbeiten: Wenn Sie auch die richtigen Pausen erhalten möchten, können Sie die entsprechenden x -Koordinaten aus dem alten Plot abrufen und hier anstelle von id verwenden:

%Vor%

    
Arun 05.03.2013 21:20
quelle
1

Wie wäre es mit:

%Vor%     
Ben Bolker 05.03.2013 18:19
quelle

Tags und Links