Kreisdiagramm in R erstellen

von | Zuletzt bearbeitet am: Feb 19, 2025 | R, R-Diagramme


Mit einem Kreisdiagramm (auch Kuchendiagramm oder Tortendiagramm) kann man für nominal- und z.T. ordinalskalierte Variablen die relativen Häufigkeiten der Ausprägungen zur Gesamtzahl darstellen. Kurz gesagt, z.B. die prozentuale Verteilung von Noten in einem Notenspiegel. Hierzu kann man in R die pie()-Funktion verwenden oder mit ggplot ein noch schickeres Kreisdiagramm erstellen.

Kreisdiagramm in R mit pie()-Befehl für einen Notenspiegel

Zum Installieren von R bzw. RStudio empfehle ich diesen Artikel. Für augenfreundliches Arbeiten empfehle ich euch diesen Artikel sehr. Schließlich wird die Frage nach dem Import von Daten in R in diesem Artikel beantwortet.

Im Beispiel stelle ich die prozentualen Häufigkeiten der Sportnoten innerhalb einer Stichprobe dar.
 

1 Das Kreisdiagramm erstellen

1.1 Ein 1. Entwurf

Als erstes wird mit dem pie()-Befehl eine vorher zu erstellende Häufigkeitstabelle in einen Kreis gepackt. Die Häufigkeitstabelle wird mit dem Befehl table() erstellt und hat folgendes Ergebnis:


> table(df$Sportnote)

    Sehr gut  Gut Befriedigend  Ausreichend   Mangelhaft   Ungenügend 
           6   14           11           11            2            7

Damit ist zunächst klar, dass nicht Prozentwerte, sondern absolute Häufigkeiten abgetragen werden:


pie(table(df$Sportnote))

Das erste Ergebnis ist erstmal ernüchternd. Es wird nachfolgend noch entsprechend angepasst.

Einfaches Kreisdiagramm R mit pie()

 

1.2 Relative Häufigkeiten berechnen

Relative Häufigkeiten, also Prozentwerte erhält man durch einfaches Teilen der absoluten Häufigkeiten durch die Gesamtzahl – hier Testsubjekte. Ich könnte diese zwar manuell zählen (es sind im Beispiel 51), das ist aber wenig dynamisch. Daher summiere ich die Anzahl aller Sportnoten mit dem sum()-Befehl, den ich in die Häufigkeitstabelle einbaue.

Jeder Eintrag in der Häufigkeitstabelle wird folglich durch die Gesamtzahl geteilt. Zu guter letzt möchte ich dies mit 100 multiplizieren, um einfach zu lesende Prozentwerte zu erhalten.

Im Code sieht das dann wie folgt aus:


(table(df$Sportnote)/sum(table(df$Sportnote)))*100

 

Das Ergebnis ist Folgendes:


 Sehr gut        Gut Befriedigend  Ausreichend   Mangelhaft   Ungenügend 
11.764706  27.450980    21.568627    21.568627     3.921569    13.725490

Diese Werte möchte ich nun aber noch auf zwei Dezimalstellen gerundet speichern, damit ich sie für die spätere Beschriftung des Diagramms wieder verwenden kann. Ich speichere sie in der Variable „prozent“ und runde mit der round()-Funktion auf 2 Nachkommastellen.


prozent <- round((table(df$Sportnote)/sum(table(df$Sportnote)))*100,2)

Die Variable kann man sich ausgeben lassen und erhält Folgendes:


 Sehr gut    Gut Befriedigend  Ausreichend   Mangelhaft   Ungenügend 
    11.76  27.45        21.57        21.57         3.92        13.73

 

1.3 Beschriftung erstellen

Damit man beim Lesen des Kreisdiagramms weiß, welche Sportnote welchen Anteil in der Stichprobe hat, ist es notwendig eine Beschriftung zu erstellen. Hierzu definiert man eine Variable mit den jeweiligen Ausprägungen. Im Beispiel sind es die sechs Schulnoten. Die Beschriftung erfolgt immer aufsteigend, egal ob es numerische Variablen sind oder Wörter (sog. character), weil die Häufigkeitstabelle so aufgebaut ist. Im Zweifel lässt man sich also immer eine Häufigkeitstabelle ausgeben, um die Reihenfolge richtig zu erstellen. Ich verknüpfe nun also lediglich die sechs Noten miteinander in einer neuen Variable.


noten <- c("Sehr gut", "Gut", "Befriedigend", "Ausreichend", "Mangelhaft", "Ungenügend")

 

Im letzten Schritt für die Beschriftung füge ich die Prozentwerte von oben und die Noten zusammen. Dies funktioniert mit dem paste()-Befehl. Ich erstelle eine neue Variable, die sich aus der Zusammensetzung der Variable "noten" (Bezeichnung der Noten), "prozent" (prozentuale Häufigkeiten), dem Prozentzeichen (%) sowie einem Leerzeichen (" ") zusammensetzt.


beschriftung <- paste(noten, prozent, "%", sep=" ")

 

Lässt man sich nun die Variable "beschriftung" testweise ausgeben, erhält man die jeweilige Note und die relativen Häufigkeiten (in %):


[1] "Sehr gut 11.76 %"     "Gut 27.45 %"          "Befriedigend 21.57 %"
[4] "Ausreichend 21.57 %"  "Mangelhaft 3.92 %"    "Ungenügend 13.73 %" 

 

1.4 Kreisdiagramm und Beschriftung zusammenführen

Hierzu ist es lediglich notwendig, die bisher gemachten Befehle zu kombinieren.

  1. Man beginnt wie gehabt mit dem pie()-Befehl, in dem man die Häufigkeitstabelle der Sportnote mit dem table()-Befehl als Datengrundlage definiert.
  2. Als Nächstes wird mit dem labels-Argument innerhalb von pie() die Beschriftung festgelegt: labels = beschriftung
  3. Mit main="Notenspiegel" vergebe ich einen Diagrammtitel.
  4. Mit col = c() vergebe ich nun noch aussagekräftige Farben. Auch sie sind in Anführungszeichen und mit Komma getrennt anzugeben. Achtung, die Reihenfolge ist analog zur Beschriftung, die sich aus der Häufigkeitstabelle ablesen lässt.

 

Der gesamte Code sieht wie folgt aus:


prozent <- round((table(df$Sportnote)/sum(table(df$Sportnote)))*100,2)
noten <- c("Sehr gut", "Gut", "Befriedigend", "Ausreichend", "Mangelhaft", "Ungenügend")
beschriftung <- paste(noten, prozent, "%", sep=" ")
pie(table(df$Sportnote), labels=beschriftung, main="Notenspiegel", 
    col = c("palegreen4", "palegreen3", "palegreen", 
            "firebrick3", "firebrick", "firebrick4"))
    radius = 3)

Im Ergebnis erhält man folgendes Kreisdiagramm:

Kreisdiagramm in R mit pie()-Befehl für einen Notenspiegel

 

1.5 Weitere Formatierungen

Alle der folgenden Befehle sind innerhalb des pie()-Befehls anzuwenden.

  • Um den Kreis etwas größer zu gestalten, kann mit dem Argument radius = dieser erhöht werden, z.B. 2 oder 3. Hier kann etwas experimentiert werden.
  • Die Richtung, in der die Kategorien geplottet werden ist standardmäßig im Uhrzeigersinn. Soll es gegen den Uhrzeigersinn sein, wird das Argument clockwise=FALSE verwendet.
  • Das Argument init.angle ändert den Anfangswinkel, also wo im Kreis das erste Segment beginnt. init.angle = 0 ist es 3 Uhr, standardmäßig ist es allerdings init.angle = 90 und damit 12 Uhr. Dieses Argument hängt auch von der Richtung (clockwise) ab.
  • Das Argument border = erlaubt das Einfärben der Rahmen zwischen den Kreissegmenten. Eine Farbauswahl gibt es hier.

 

2 Videotutorial zum Erstellen eines Kreisdiagramms in R


 

Hat dir der Beitrag geholfen?

Dann würde ich mich über eine kleine Spende freuen, die es mir erlaubt, weiterhin kostenfreie Inhalte zu veröffentlichen.
Alternativ kannst du über meinen Amazon Affiliate-Link einkaufen – ohne Zusatzkosten.

Vielen Dank und viel Erfolg!

Über mich

Björn Walther

Ein 💚 für Statistik & Datenanalyse

Excel Online-Kurs

YouTube-Kanal

Inhalt