2017-04-25 1 views
0

Ich versuche, Histogramme des folgenden Datensatzes zu plotten. Diese gistograms sollte Bars für jede einzelne Gruppe für Alter der Mutter und die jeweiligen Zählungen für Geburten insgesamt in dieser Gruppe:ggplot ästhetisch aes() gibt Fehler für stat_bin() zurück

mother_age birth_count 
25 - 29    2 
30 - 34    1 
35 - 39    2 
40 - 44    2 
20 - 24    2 
25 - 29    7 
30 - 34    13 
35 - 39    5 
40 - 44    1 
15 - 19    5 
20 - 24    8 
25 - 29    25 
30 - 34    46 
35 - 39    31 
40 - 44    6 
15 - 19    16 
20 - 24    48 
25 - 29    162 
30 - 34    212 
35 - 39    100 
40 - 44    22 
15 - 19    7 
20 - 24    63 
25 - 29    162 
30 - 34    237 
35 - 39    128 
40 - 44    20 
15 - 19    1 
20 - 24    15 
25 - 29    48 

Ich versuche, Histogramme plotten ggplot mit:

df1$mother_age <- as.factor(df1$mother_age) 
df1$birth_count <- as.numeric(df1$birth_count) 

mthr_chld <- ggplot(df1, aes(x=mother_age, y=birth_count)) + 
    ggtitle ("Mother Children") + 
    geom_histogram() + 
    labs(x = 'Mother\'s Age Group', y = 'Total Births') 

mthr_chld 

Es wirft einen Fehler :

Error: stat_bin() must not be used with a y aesthetic. 

Wo mache ich Fehler?

+0

Das d ata ist bereits in Binned, also mach einfach ein Balkendiagramm mit 'geom_bar'. Sie müssen sicherstellen, dass die Faktorstufen von "mother_age_group" ebenfalls in Ordnung sind. – alistaire

+1

'ggplot (df1, aes (mother_age, geburtszahl)) + geom_bar (stat = 'identity')' – ahly

+0

@ahly Vielen Dank. Lass mich das versuchen. –

Antwort

1

Ihre Daten sind bereits im Binned-Format, daher können Sie geom_histogram nicht verwenden, aber nicht aggregiert. Daher ist geom_col keine naheliegende Lösung. Sie könnte verwenden geom_bar mit stat = 'summary' mit sum als Auswertungsfunktion:

library(ggplot2) 

df <- read.table(text = 'mother_age_group birth_count 
         "25 - 29"    2 
         "30 - 34"    1 
         "35 - 39"    2 
         "40 - 44"    2 
         "20 - 24"    2 
         "25 - 29"    7 
         "30 - 34"    13 
         "35 - 39"    5 
         "40 - 44"    1 
         "15 - 19"    5 
         "20 - 24"    8 
         "25 - 29"    25 
         "30 - 34"    46 
         "35 - 39"    31 
         "40 - 44"    6 
         "15 - 19"    16 
         "20 - 24"    48 
         "25 - 29"    162 
         "30 - 34"    212 
         "35 - 39"    100 
         "40 - 44"    22 
         "15 - 19"    7 
         "20 - 24"    63 
         "25 - 29"    162 
         "30 - 34"    237 
         "35 - 39"    128 
         "40 - 44"    20 
         "15 - 19"    1 
         "20 - 24"    15 
         "25 - 29"    48', head = T) 

ggplot(df, aes(mother_age_group, birth_count)) + 
    geom_bar(stat = 'summary', fun.y = sum) 

... oder einfach nur aggregierte, bevor Sie Grundstück:

library(dplyr) 

df %>% count(mother_age_group, wt = birth_count) %>% 
    ggplot(aes(mother_age_group, n)) + 
    geom_col() 

+0

Perfekt, aber wie von @ahly vorgeschlagen, ist 'geom_bar (stat = 'identity')' immer noch ein kleines Stück Code und macht dasselbe wie das, was Sie vorgeschlagen haben. Ich frage mich, welche wäre besser zu verwenden und warum? –

+1

'geom_col' ist eine Abkürzung für' geom_bar (stat = 'identity') '. Beide arbeiten direkt auf 'df', aber nicht auf ganz offensichtliche Weise: Es wird tatsächlich ein Balken für jede Zeile gezeichnet und gestapelt, weil der Standard für' position' '' stack'' ist. Also ja, 'ggplot (df, aes (mother_age_group, birth_count)) + geom_col()' funktioniert, nur leicht unintelligent. – alistaire

Verwandte Themen