Balkendiagramm für Gruppen in R erstellen

von | Zuletzt bearbeitet am: Oct 17, 2022 | R, R-Diagramme


Mit einem Balkendiagramm für Gruppen tragt ihr typischerweise jeweils die Häufigkeiten eines Merkmals in einer Grafik für die Gruppen ab. Dieser Artikel zeigt ein Tutorial, wie ihr ein Balkendiagramm in R mit Bordmitteln (barplot-Funktion) am schnellsten erstellt.

Zunächst müssen eure Daten eingelesen sein. Ihr könnt sie alternativ mit dem attach-Befehl aus dem Data-frame herauslösen. Ich zeige hier die Variante mit Zugriff auf den Data-frame. Deswegen steht vor den Variablen stets mein Data-frame, der “data_xls” heißt sowie das Dollarzeichen ($) zur Verknüpfung. Ich zeige Schritt für Schritt den Aufbau und fange zunächst mit den Datenpunkten an. Habt ihr eine zeitliche Abfolge einer Variable, wollt ihr vielleicht eher ein Liniendiagramm in R erstellen. Für ein einfaches Balkendiagramm nutzt diesen Artikel.

Zum Installieren von R bzw. RStudio empfehle ich diesen Artikel. Für augenfreundliches Arbeiten empfehle ich euch diesen Artikel sehr.

Im Beispiel stelle ich in den Balken die Häufigkeit des Alters der Probanden der Stichprobe dar. Allerdings hat jedes Alter jeweils eine Balken für Frauen und Männer.
 

1 Die Balken eintragen

Als erstes arbeitet ihr mit dem Befehl barplot. Der grobe Aufbau sieht so aus:


barplot(x, y, ...)

 

In meinem Fall möchte ich das Alter bzw. dessen Häufigkeit in den Balken abgetragen haben. Allerdings möchte ich je einen Balken für Männer und Frauen, also die Variable Geschlecht. Da ich es aus meinem Data-frame data_xls beziehe, setze ich vor die Variablen entsprechend “data_xls$”. Die Länge des Balkens ergibt sich aus den Häufigkeiten, welche über eine Häufigkeitstabelle ermittelt werden müssen. Für die Häufigkeitstabelle wird der Befehl “table()” verwendet. Es wird für das Geschlecht (data_xls$Geschlecht) jeweils die Häufigkeit des Alters (data_xls$Alter) gezählt. Als nächstes ist das Diagramm zu drehen, da standardmäßig mit barplot() ein Säulendiagramm erstellt wird. Der Befehl zum drehen ist “horiz = TRUE”. Da die Balken untereinander stehen sollen, verwendet man zusätzlich den Befehl “beside = TRUE”. Das sieht im Code recht knapp aus:


barplot(table(data_xls$Geschlecht, data_xls$Alter), horiz = TRUE, beside = TRUE)

Gruppiertes Balkendiagramm

 

2 Achsenbeschriftung einfügen

Wie man sehen kann, wurden die Balken in einem Balkendiagramm eingetragen. Allerdings fällt auf, dass noch einige Dinge fehlen, um ein aussagekräftiges Diagramm zu haben. Die Bezeichnung der Achsen fehlt und muss nachgetragen werden, da dem Leser nicht klar ist, was hier überhaupt dargestellt ist. An der x-Achse ist ja offensichtlich die Häufigkeit abgetragen. Von daher schreibe ich mit xlab die Häufigkeit an die x-Achse (xlab=”Häufigkeit”). An die y-Achse schreibe ich mit ylab das Alter (ylab=”Alter”). Wichtig sind die Anführungszeichen nach dem Gleichheitszeichen. Im Code sieht das dann wie folgt aus:


barplot(table(data_xls$Geschlecht, data_xls$Alter), beside = TRUE,
xlab = “Häufigkeit“, ylab = “Alter“)

Gruppiertes Balkendiagramm
 

3 Einen Titel vergeben

Jedes Diagramm verdient einen aussagekräftigen Titel. Zumindest dann, wenn es in einer Präsentation erscheint. Das funktioniert über das Argument “main“. Ich bin hier unkreativ und vergebe lediglich TITEL als Titel. Der Befehl heißt dann main=”TITEL”. Auch hier ist auf die Anführungszeichen zu achten. Das Argument wird mit einem Komma einfach an den bisherigen Code angehängt.


plot(data_xls$Gewicht, data_xls$Größe,
xlab = “Alter“, ylab = “Häufigkeit“,
main = “TITEL“, sub = “UNTERTITEL“)

Gruppiertes Balkendiagramm

 

 

4 Größe der Beschriftungen ändern

Die Größe der Achsenbeschriftung kann ebenfalls angepasst werden. Mit dem Argument cex.axis werden die Achsenwerte in ihrer Größe verändert. Das Argument cex.lab sorgt für eine andere Größe der y-Achsenbeschriftung, cex.names für eine andere Größe der x-Achsenbeschriftung. cex.main ist für den Titel und cex.sub für den Untertitel verantwortlich. In meinem Falle vergrößere ich die Achsenwerte und die Achsenbezeichnung des Balkendiagramms etwas mit jeweils 1.5. Der Standardwert ist 1. Ihr könnt auch mit 0.5 eine Verkleinerung erzielen. Der Code sieht wie folgt aus.


plot(data_xls$Gewicht, data_xls$Größe,
xlab = “Alter“, ylab = “Häufigkeit“,
main = “TITEL“, sub = “UNTERTITEL“,
cex.axis=1.5, cex.lab=1.5, cex.names=1.5, cex.main=1.5, cex.sub=1.5)

Gruppiertes Balkendiagramm

 

5 y-Achse einzeichnen

Beim Betrachten des Diagramms fällt auf, dass die y-Achse nicht wirklich eingezeichnet ist. Typischerweise würde man links neben den Balken einen vertikalen Strich – die y-Achse – erwarten. Dies kann man mit dem Befehl “axis.lty=1” nachholen. Das Argument 1 steht dabei für eine durchgezogene Linie. Es gibt noch weitere Argumente (2-6), die für gestrichelte, gepunktete usw. Linien stehen. Die 1 ist hier empfehlenswert


barplot(table(data_xls$Geschlecht, data_xls$Alter), beside = TRUE,
xlab = “Alter“, ylab = “Häufigkeit“,
main = “TITEL“, sub = “UNTERTITEL“,
cex.axis = 1.5, cex.main=1.5, cex.names = 1.5, cex.lab=1.5, cex.sub=1.5,
axis.lty = 1)

Gruppiertes Balkendiagramm

 

6 Zusatz: Farbe der Balken, Achsen usw. ändern

Mit dem Argument “col” könnt ihr euren Balken zusätzlich einen farbigen Anstrich geben. Allerdings vergebt ihr mehrere Farben – je Geschlecht eines – mit col=c(). In die Klammer kommen dann in Anführungszeichen die Farben für, in meinem Fall, die Geschlechter. Z.B. col=c(“darkblue”, “darkred”).  col.axis färbt die Achsen, col.lab die Achsenbeschriftung, col.main den Titel und col.sub den Untertitel des Balkendiagramms ein. Mit Farbe würde ich allerdings sparsam umgehen. Schwarze oder in Graustufen gehaltene Balken sind am unverfänglichsten. Zu den Farben in R gibt es hier noch mal einen ausführlichen Artikel: Farben in R, der „col“-Befehl.


barplot(table(data_xls$Geschlecht, data_xls$Alter), beside = TRUE,
ylab = “Häufigkeit“, xlab = “Alter“, main = “TITEL“, sub = “UNTERTITEL“,
cex.axis = 1.5, cex.names = 1.5, cex.main=1.5, cex.lab=1.5, cex.sub=1.5,
axis.lty = 1,
col=c(“darkblue“, “darkred“), col.axis=“darkslategrey“, col.main=“navy“, col.lab=“darkslategrey“, col.sub=“snow4“)

Gruppiertes Balkendiagramm

Im Beispiel habe ich die Achsenbezeichnung und Achsenbeschriftung mit einem dunklen grau (“darkslategrey”), den Titel mit “navy” und den Untertitel mit einem hellen grau (“snow4”) eingefärbt. So eine Darstellung würde ich euch typischerweise nicht empfehlen. Sie soll nur veranschaulichen, wie ihr Diagramme in R farblich (über)anpassen könnt.

Weitere mögliche Farben könnt ihr über folgenden Befehl abrufen:

colors()

Er zeigt euch die 657 in R existierenden Farbnamen an, die ihr beliebig miteinander kombinieren könnt.

 

7 Eine Legende einfügen

Da bisher noch nicht klar ist, was die Balken im Diagramm bedeuten, muss eine Legende dies spezifizieren. Dies funktioniert mit dem legend()-Befehl, der eine Legende in euer Diagramm plottet. Diese kann, muss aber nicht in den Befehl barplot() integriert werden. Ich bevorzuge es außerhalb von barplot().

Mit legend(“topright”) wird jene nach rechts oben verschoben. Es können für dieses Argument beliebige Kombinationen aus left, right und top, bottom gewählt werden. Als nächstes bedarf es der Beschriftung, also was überhaupt dargestellt werden soll. Dazu werden die Bezeichnungen der Kategorien eingesetzt. Das passiert mit c(Kategorien). Für das Beispiel also c(“Männlich”, “Weiblich”). Die Reihenfolge ist hier entscheidend. Es beginnt immer mit der kleinsten Ausprägungen – im Beispiel ist männlich mit 0 codiert und demzufolge zu erst zu nennen.

Nun braucht es lediglich noch die Farbzuweisung. Hierfür ist es zunächst notwendig für die Kategorien einen einzufärbenden Punkt darzustellen. Das funktioniert mit pch. pch=15 stellt mir vor beide eben bezeichneten Kategorien ein Viereck. Diese färben wir mit der col-Funktion von oben ein. Wir verwenden also die identischen Farben. Die Standardfarben wären für dieses Diagramm col=c(“grey30”, “grey90”). Der erste Wert wird analog den Männern, der zweite den Frau zugewiesen. Habt ihr darkblue und darkred, wie oben zugewiesen, sieht der Befehl analog aus col=c(“darkblue”, “darkred”).


barplot(table(data_xls$Geschlecht, data_xls$Alter), beside = TRUE,
ylab = “Häufigkeit“, xlab = “Alter“, main = “TITEL“, sub = “UNTERTITEL“,
cex.axis = 1.5, cex.names = 1.5, cex.main=1.5, cex.lab=1.5, cex.sub=1.5,
axis.lty = 1,
col=c(“grey30“, “grey90“), col.axis=“darkslategrey“, col.main=“navy“, col.lab=“darkslategrey“, col.sub=“snow4“),
legend(“topright“, c(“Männlich“, “Weiblich“), pch=15, col=c(“grey30“, “grey90“))

 

gruppiertes Balkendiagramm R

 

Nun ist aber erkennbar, dass noch ein paar Anpassungen vorzunehmen sind. Ich hätte gerne ein transparentes Viereck, was mit bty=”n” funktioniert. Die Schriftgröße kann man nicht separat anpassen, weswegen man zunächst die Legende mit cex vergrößert. 1 ist der Standardwert. Ich vergrößere es auf 1.75 (cex=1.75).

Weiterhin ist mir der Abstand zwischen Männlich und Weiblich zu groß. Von daher reduziere ich ihn mit y.intersp = 0.3. Der Abstand zwischen den Vierecken und der Beschriftung wird mit x.intersp = 0.5 reduziert..

Schließlich wird mit der inset-Funktion die gesamte nun transparente und in Teilen etwas vergrößerte Legende verschoben. Ich möchte sie weiter oben und weiter rechts haben. inset=c(-0.3, -0.1) schiebt sie relativ betrachtet um 0.3 nach rechts und 0.1 nach oben.


barplot(table(data_xls$Geschlecht, data_xls$Alter), beside = TRUE,
ylab = “Häufigkeit“, xlab = “Alter“, main = “TITEL“, sub = “UNTERTITEL“,
cex.axis = 1.5, cex.names = 1.5, cex.main=1.5, cex.lab=1.5, cex.sub=1.5,
axis.lty = 1,
col=c(“grey30“, “grey90“),
legend(“topright“, c(“Männlich“, “Weiblich“), pch=15, col=c(“grey30“, “grey90“),
cex=1.75, bty=“n“, y.intersp = 0.3, x.intersp= 0.5, inset= c(-0.3, -0.1))

Gruppiertes Balkendiagramm

 

Hinweis: Speziell mit der cex, y.intersp, x.intersp und inset-Funktion müsst ihr mitunter etwas rumprobieren, da es von den Dimensionen eures Diagrammes abhängt.

 

8 Daten zum Download

Beispieldatensatz Balkendiagramm für Gruppen in R
 

9 Videotutorial


 

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