2016-12-25 3 views
-1

Mit Titanic-Datensatz zeichne ich Histogramme von Alter/Geschlecht gegen die Passagierklasse.R + ggplot. Zeichnen Sie Kinderdaten in demselben Diagramm wie Elterndaten

str(titanic) gibt den folgenden Daten

> 'data.frame': 714 obs. of 4 variables: 
$ Survived: int 0 1 1 1 0 0 0 1 1 1 ... 
$ Pclass : int 3 1 3 1 3 1 3 3 2 3 ... 
$ Sex  : chr "male" "female" "female" "female" ... 
$ Age  : num 22 38 26 35 35 54 2 27 14 4 ... 

Zuerst habe ich ein Grundstück in keinem Verhältnis Männer/Frauen gegen die Reiseklassen.

Es wurde von

ggplot(data = titanic, aes(x = factor(Age), fill = factor(Sex))) + 
    geom_bar(position = "dodge", aes(y = (..count..)/sum(..count..))) + 
    facet_grid(. ~ Pclass) + scale_x_discrete(breaks=c(20,40,60)) + 
    ylab("Frequency") + xlab("Age") + 
    scale_fill_discrete(name = "Sex") 

enter image description here

Jetzt will ich verwenden, um die gleichen Graph, sondern fügen Sie zusätzliche Informationen geschehen -> Verhältnis von Überbleibseln für alle Kategorien. Zum Beispiel, was ist der Anteil der Überlebens-Frauen im Alter von 20-30, die die erste Klasse reiste.

Ich würde es gerne in den gleichen Bars sehen, d. H. Jede Spalte in zwei Teile aufteilen (überlebt/nicht überlebt).

Kann ich es mit ggplot tun? Und wenn ja, wie?

+0

Können Sie Code zur Verfügung stellen von der 4d 'Titanic' Array zu' titanic' df gehen? – Axeman

+0

Sie wollen wahrscheinlich "überleben" und "facet_grid (Sex ~ P.class)" füllen. – Axeman

+0

Erzielen Sie Ihr Ziel mit 'facet_grid (. ~ Pclass + Survived)'? –

Antwort

1

Mit dem eingebauten Titanic-Datensatz kann ich Ihnen grob zeigen, was @Axeman in den Kommentaren vorgeschlagen hat. Beachten Sie, dass es nur zwei Kategorien für das Alter (Kind/Erwachsener) gibt, sodass Sie entscheiden müssen, wie Sie Ihre Daten sortieren sollen.

ggplot(as.data.frame(Titanic) 
     , aes(y = Freq 
      , x = Age 
      , fill = Survived)) + 
    geom_col() + 
    facet_grid(Sex ~ Class) 

enter image description here

Wichtig ist, bin ich nicht sicher, dass Sie etwas gewinnen, indem sie die Frequenzen in der Art und Weise zeigt man sich gerade befindet, da sie etwas nach Bedeutung anders als die Zählungen nicht erscheinen würde zu zeigen. Wenn Sie stattdessen den Anteil innerhalb jeder überlebenden Gruppe anzeigen möchten, können Sie diese Prozentsätze besser zuerst berechnen und dann an ggplot weiterleiten. Hier ist ein Beispiel dafür mit dplyr. Auch hier können Ihre Altersklassen beliebig sein. Beachten Sie jedoch, dass die Daten um so lauter sind, je schmaler die Bins sind.

as.data.frame(Titanic) %>% 
    group_by(Class, Sex, Age) %>% 
    mutate(Proportion = Freq/ sum(Freq)) %>% 
    ggplot(aes(y = Proportion 
      , x = Age 
      , fill = Survived)) + 
    geom_col() + 
    facet_grid(Sex ~ Class) 

enter image description here

Verwandte Themen