Gegeben ist folgende Tabelle:

JAHR    LAND
1999    UK
1999    UK
1999    UK
1999    UK
2000    UK
2000    UK
2001    UK
2001    UK
2001    UK
2001    UK
2003    UK
2003    UK
2003    UK
2003    UK
2004    UK
2005    UK
2005    UK
2005    UK
2005    UK
2006    UK
2006    UK
2008    UK
2008    UK
2008    UK
2008    UK
2008    UK
2009    UK
2001    GER
2002    GER
2003    GER
2003    GER
2004    GER
2004    GER
2005    GER
2005    GER
2006    GER
2006    GER
2006    GER
2007    GER
2008    GER
2009    GER
2010    GER
2011    GER
2011    GER
2011    GER
2006    UK
2011    GER
2012    GER
2012    GER
2012    GER
2005    USA
2007    USA
2007    USA
2009    USA
2010    USA
2010    USA
2011    USA
2012    USA
2012    USA

Jetzt möchte ich mit ggplot eine Übersichtsgraphik erstellen. Hierbei soll die X-Achse die Jahreszahlen wiederspiegeln. Auf der Y-Achse sollen die Häufigkeiten der einzelnen Länder pro Jahr angezeigt werden.

Da die Länder-Variable ein factor ist, benötige ich einen ggplot-Code, welcher die Häufigkeiten der einzelnen factor-levels (Länder) gruppiert nach Jahren ausrechnet…

Das funktioniert hier “manuell” per

# Datensatz einlesen
dat < - read.table("http://www.produnis.de/R/Faktorfrequenz.txt", sep="\t", colClasses = "character", header=T)
# Berechnung
with(dat,table(JAHR,LAND))

Aber wie “übersetze” ich das in einen ggplot-Code? Da ggplot selbst statistische Berechnungen durchführen kann, läge der Vorteil eines “reinen” ggplot-Codes darin, dass neue factor-levels (in diesem Fall also ein neues LAND) direkt in der Grafik eingebunden wäre, ohne dass man den Code ändern müsste.

ggplot-Code

Und so funktioniert es:

# Datensatz einlesen
dat < - read.table("http://www.produnis.de/R/Faktorfrequenz.txt", sep="\t", colClasses = "character", header=T)
    
# plotten
#------------
# Variante 1
ggplot(df, aes(x=factor(JAHR), fill=LAND)) + 
      geom_bar(position="dodge")

FreqPlot1

# Variante 2
    ggplot(df, aes(JAHR)) + 
      geom_freqpoly(aes(y= ..count.., fill=LAND, group=LAND, colour=LAND),stat="bin",binwidth=1)

FreqPlot2

# Variante 3
    ggplot(df, aes(JAHR)) + 
      geom_area(aes(y= ..count.., fill=LAND, group=LAND),stat="bin",binwidth=1)

FreqPlot3