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

1
2
3
4
# 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:

1
2
3
4
5
6
7
8
# 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

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

FreqPlot2

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

FreqPlot3