Barplot in R

Wenn eine Variable einige Werte annimmt, ist es üblich, die Informationen mit einer Häufigkeitstabelle zusammenzufassen, die mit einem Barchart oder Barplot in R dargestellt werden kann. In diesem Artikel werden wir die Grundlagen der Erstellung von Balkendiagrammen in R erklären.

Die R-Barplot-Funktion

Für die Erstellung eines Balkendiagramms in R können Sie die Basisfunktion barplot von R verwenden. In diesem Beispiel werden wir einen Balkenplot aus einem Datenrahmen erstellen. Konkret handelt es sich bei dem Beispieldatensatz um den bekannten mtcars. Laden Sie zunächst die Daten und erstellen Sie mit der Funktion table eine Tabelle für die Spalte cyl.

# Load datadata(mtcars)attach(mtcars)# Frequency tablemy_table <- table(cyl)my_table
cyl 4 6 811 7 14

Erinnern Sie sich daran, dass Sie zur Erstellung eines Balkendiagramms in R die Funktion barplot verwenden können, indem Sie als Parameter Ihre zuvor erstellte Tabelle angeben, um die absolute Häufigkeit der Daten anzuzeigen. Wenn Sie jedoch ein Balkendiagramm mit Prozentsätzen auf der vertikalen Achse (der relativen Häufigkeit) bevorzugen, können Sie die Funktion prop.table verwenden und das Ergebnis wie folgt mit 100 multiplizieren.

# One row, two columnspar(mfrow = c(1, 2))# Absolute frequency barplotbarplot(my_table, main = "Absolute frequency", col = rainbow(3))# Relative frequency barplotbarplot(prop.table(my_table) * 100, main = "Relative frequency (%)", col = rainbow(3))par(mfrow = c(1, 1))

Beachten Sie, dass Sie mit der Funktion plot auch ein Balkendiagramm mit Faktor-Daten erstellen können.

plot(factor(mtcars$cyl), col = rainbow(3))

Darüber hinaus können Sie Zahlen auf Balken mit der Textfunktion wie folgt anzeigen:

barp <- barplot(my_table, col = rainbow(3), ylim = c(0, 15))text(barp, my_table + 0.5, labels = my_table)
Wenn Sie einen Balkenplot innerhalb einer Variablen zuweisen, werden die Achsenwerte gespeichert, die dem Mittelpunkt jedes Balkens entsprechen.

Mit der Funktion grid können Sie auch ein Gitter hinter den Balken einfügen.

barp <- barplot(my_table, col = rainbow(3), ylim = c(0, 15))grid(nx = NA, ny = NULL, lwd = 1, lty = 1, col = "gray")barplot(my_table, col = rainbow(3), ylim = c(0, 15), add = TRUE)

Grafische Parameter des Balkenplots: Titel, Achsenbeschriftungen und Farben

Wie bei anderen Plots können Sie eine Vielzahl von grafischen Parametern angeben, z. B. Achsenbeschriftungen, einen Titel oder die Anpassung der Achsen. Im vorherigen Codeblock haben wir die Farben des Balkendiagramms mit dem Parameter col angepasst. Sie können die von Ihnen bevorzugten Farben mit einem Vektor festlegen oder die Funktion rainbow mit der Anzahl der Balken als Parameter verwenden, wie wir es getan haben, oder andere Farbpalettenfunktionen verwenden. Sie können auch die Randfarbe der Balken mit dem border Argument ändern.

barplot(my_table, # Data main = "Customized bar plot", # Title xlab = "Number of cylinders", # X-axis label ylab = "Frequency", # Y-axis label border = "black", # Bar border colors col = c("darkgrey", "darkblue", "red")) # Bar colors

Gruppenbeschriftungen ändern

Die Beschriftung jeder Gruppe kann mit dem names.arg Argument geändert werden. In unserem Beispiel sind die Gruppen mit Zahlen beschriftet, aber wir können sie ändern, indem wir etwas wie folgt eingeben:

barplot(my_table, names.arg = c("four", "six", "eight")) 

Balkenbreite und Abstand der Balken

Sie können auch den Abstand zwischen den Balken oder die Breite der Balken mit den Argumenten width und space ändern. Für den Abstand zwischen den Gruppen konsultieren Sie den entsprechenden Abschnitt dieses Tutorials.

par(mfrow = c(1, 2))# Bar width (by default: width = 1)barplot(my_table, main = "Change bar width", col = rainbow(3), width = c(0.4, 0.2, 1))# Bar spacebarplot(my_table, main = "Change space between bars", col = rainbow(3), space = c(1, 1.1, 0.1))par(mfrow = c(1, 1))
Der space Vektor stellt den Abstand des Balkens zum vorherigen dar, so dass das erste Element nicht berücksichtigt wird.

Balkenplot aus Datenrahmen oder Liste

Außerdem können Sie einen Balkenplot direkt mit den Variablen eines Datenrahmens oder sogar einer Matrix erstellen, aber beachten Sie, dass die Variable die Anzahl eines Ereignisses oder Merkmals sein sollte. Im folgenden Beispiel zählen wir die Anzahl der Fahrzeuge nach Farbe und stellen sie in einem Balkendiagramm dar. Wir werden jede Autofarbe zum Einfärben der entsprechenden Balken verwenden.

df <- data.frame(carColor = c("red", "green", "white", "blue"), count = c(3, 5, 9, 1))# df <- as.list(df) # Equivalentbarplot(height = df$count, names = df$carColor, col = c("red", "green", "white", "blue"))

Balkendiagramm für kontinuierliche Variable

Wenn Sie mit einer kontinuierlichen Variable arbeiten, müssen Sie die Funktion cut verwenden, um die Daten zu kategorisieren. Andernfalls haben Sie so viele Balken wie die Länge Ihres Vektors und die Höhe der Balken ist gleich 1. Im folgenden Beispiel werden wir unsere Daten von 0 bis 45 in 5er-Schritten mit dem Argument breaks unterteilen.

x <- c(2.1, 8.6, 3.9, 4.4, 4.0, 3.7, 7.6, 3.1, 5.0, 5.5, 20.2, 1.7, 5.2, 33.7, 9.1, 1.6, 3.1, 5.6, 16.5, 15.8, 5.8, 6.8, 3.3, 40.6)barplot(table(cut(x, breaks = seq(0, 45, by = 5))))

Horizontaler Balkenplot

Standardmäßig werden Balkenplots in R vertikal dargestellt. Es ist jedoch üblich, horizontale Balkenplots darzustellen. Sie können den Plot um 90º drehen und ein horizontales Balkendiagramm erstellen, indem Sie das horiz-Argument auf TRUE setzen.

barplot(my_table, main = "Barchart", ylab = "Number of cylinders", xlab = "Frequency", horiz = TRUE) # Horizontal barplot

R-Balkenplot-Legende

Eine Legende kann einem Balkenplot in R mit dem legend.text-Argument hinzugefügt werden, wobei Sie die Namen angeben können, die Sie der Legende hinzufügen möchten. Beachten Sie, dass in RStudio der resultierende Plot etwas anders aussehen kann, da der Hintergrund der Legende weiß statt transparent ist.

barplot(my_table, xlab = "Number of cylinders", col = rainbow(3), legend.text = rownames(my_table)) # Legend
Beachten Sie, dass durch die Verwendung des legend.text-Arguments die Legende den Balkenplot überlappen kann.

Die einfachste Methode, dieses Problem in diesem Beispiel zu lösen, ist das Verschieben der Legende. Dies kann mit dem Argument args.legend erreicht werden, mit dem Sie grafische Parameter innerhalb einer Liste festlegen können. Sie können die Position auf top, bottom, topleft, topright, bottomleft und bottomright setzen.

barplot(my_table, xlab = "Number of cylinders", col = rainbow(3), legend.text = rownames(my_table), args.legend = list(x = "top"))

Äquivalent dazu können Sie die vorherige Darstellung mit der Legende mit der Funktion legend wie folgt mit den Argumenten legend und fill erreichen.

barplot(my_table, xlab = "Number of cylinders", col = rainbow(3))legend("top", legend = rownames(my_table), fill = rainbow(3))

Dieser Ansatz funktioniert jedoch nur dann gut, wenn die Legende die Balken an diesen Positionen nicht überlappt. Ein besserer Ansatz ist es, die Legende nach rechts aus dem Balkenplot heraus zu verschieben. Sie können dies tun, indem Sie das inset-Argument wie folgt als Element einer Liste innerhalb des args.legend-Arguments übergeben.

par(mar = c(5, 5, 4, 10))barplot(my_table, xlab = "Number of cylinders", col = rainbow(3), legend.text = rownames(my_table), # Legend values args.legend = list(x = "topright", inset = c(-0.20, 0))) # Legend arguments

Sie können die Achsengrenzen auch mit den xlim– bzw. ylim-Argumenten für vertikale bzw. horizontale Balkendiagramme ändern, aber beachten Sie, dass in diesem Fall der anzugebende Wert von der Anzahl und der Breite der Balken abhängt. Erinnern Sie sich daran, dass Sie, wenn Sie einen Balkenplan einer Variablen zuweisen, die Achsenpunkte speichern können, die dem Mittelpunkt jedes Balkens entsprechen.

barplot(my_table, xlab = "Number of cylinders", col = rainbow(3), legend.text = rownames(my_table), xlim = c(0, 4.25))

Eine andere Möglichkeit, die Legende zu verschieben, besteht darin, sie mit den Funktionen layout, par und plot.new unter das Balkendiagramm zu verschieben. Dieser Ansatz ist fortgeschrittener als die anderen und Sie müssen möglicherweise die grafischen Parameter vor der Ausführung des Codes löschen, um die richtige Darstellung zu erhalten, da die grafischen Parameter geändert werden.

# dev.off()# opar <- par(no.readonly = TRUE)plot.new()layout(rbind(1, 2), heights = c(10, 3))barplot(my_table, xlab = "Number of cylinders", col = rainbow(3))par(mar = c(0, 0, 0, 0))plot.new()legend("top", rownames(my_table), lty = 1, col = c("red", "green", "blue"), lwd = c(1, 2))# dev.off()# on.exit(par(opar))

Gruppierter Balkenplot in R

Ein gruppierter Balkenplot, auch bekannt als Side-by-Side-Balkenplot oder Clusterbalkendiagramm, ist ein Balkendiagramm in R mit zwei oder mehr Variablen. Das Diagramm zeigt die Balken für jede der mehreren Variablen an.

# Variable am to factoram <- factor(am)# Change factor levelslevels(am) <- c("Automatic", "Manual")# Table cylinder - transmission typeother_table <- table(cyl, am)# other_table <- xtabs(~cyl + am , data = mtcars) # Equivalentbarplot(other_table, main = "Grouped barchart", xlab = "Transmission type", ylab = "Frequency", col = c("darkgrey", "darkblue", "red"), legend.text = rownames(other_table), beside = TRUE) # Grouped bars

Wenn wir table(am, cyl) statt table(cyl, am) angegeben hätten, würde die X-Achse die Anzahl der Zylinder statt des Getriebetyps darstellen.

Abstand zwischen Gruppen

Wie wir bereits besprochen haben, können Sie den Abstand zwischen den Balken ändern. Bei mehreren Gruppen können Sie einen Vektor mit zwei Elementen festlegen, wobei das erste Element der Abstand zwischen den Balken jeder Gruppe (0,4) und das zweite der Abstand zwischen den Gruppen (2,5) ist.

barplot(other_table, main = "Grouped barchart space", xlab = "Transmission type", ylab = "Frequency", col = c("darkgrey", "darkblue", "red"), legend.text = rownames(other_table), beside = TRUE, space = c(0.4, 2.5)) # Space 

Numerische Werte in Gruppen

Barplots können auch verwendet werden, um eine Variable in Gruppen zusammenzufassen, die durch einen oder mehrere Faktoren gegeben sind. Stellen Sie sich zum Beispiel vor, dass Sie die Anzahl der Zylinder und die Art des Getriebes auf der Grundlage des Mittelwerts der Pferdestärken der Fahrzeuge anzeigen möchten. Sie könnten die Funktion tapply verwenden, um die entsprechende Tabelle zu erstellen:

summary_data <- tapply(mtcars$hp, list(cylinders = mtcars$cyl, transmission = mtcars$am), FUN = mean, na.rm = TRUE)summary_data
 transmissioncylinders Automatic Manual 4 84.66667 81.8750 6 115.25000 131.6667 8 194.16667 299.5000

Jetzt können Sie das entsprechende Balkendiagramm in R erstellen:

par(mar = c(5, 5, 4, 10))barplot(summary_data, xlab = "Transmission type", main = "Horsepower mean", col = rainbow(3), beside = TRUE, legend.text = rownames(summary_data), args.legend = list(title = "Cylinders", x = "topright", inset = c(-0.20, 0)))

Balkendiagramm mit Fehlerbalken in R

Standardmäßig können Sie kein Balkendiagramm mit Fehlerbalken erstellen. Mit der folgenden Funktion können Sie jedoch einen vollständig anpassbaren Balkenplot mit Standard-Fehlerbalken erstellen.

# Arguments:# x: an unique factor object# y: a numeric vector object# ...: additional arguments to be passed to barplot functionbarplot.error <- function(x, y, ...){ mod <- lm(y ~ x) reps <- sqrt(length(y)/length(levels(x))) sem <- sigma(mod)/reps means <- tapply(y, x, mean) upper <- max(means) + sem lev <- levels(x) barpl <- barplot(means, ...) invisible(sapply(1:length(barpl), function(i) arrows(barpl, means + sem, barpl, means - sem, angle = 90, code = 3, length = 0.08)))}# Calling the functionbarplot.error(factor(mtcars$cyl), mtcars$hp, col = rainbow(3), ylim = c(0, 250))

Auch wenn Sie einem Balkenplot Fehlerbalken hinzufügen können, sollte beachtet werden, dass ein Boxplot nach Gruppe in diesem Szenario ein besserer Ansatz zur Zusammenfassung der Daten sein könnte.

Stacked barplot in R

Ein gestapeltes Balkendiagramm ist wie ein gruppiertes Balkendiagramm, aber die Häufigkeit der Variablen ist gestapelt. Diese Art von Balkendiagramm wird standardmäßig erstellt, wenn als Argument eine Tabelle mit zwei oder mehr Variablen übergeben wird, da das Argument beside standardmäßig FALSE ist.

barplot(other_table, main = "Stacked barchart", xlab = "Transmission type", ylab = "Frequency", col = c("darkgrey", "darkblue", "red"), legend.text = rownames(other_table), beside = FALSE) # Stacked bars (default)

Verwandt mit gestapelten Balkendiagrammen gibt es ähnliche Implementierungen, wie das Rückgratdiagramm und das Mosaikdiagramm. Diese Art von Plots kann mit den Funktionen spineplot und mosaicplot des Pakets graphics erstellt werden.

Der Mosaikplot ermöglicht die Visualisierung von Daten zweier oder mehrerer quantitativer Variablen, wobei die Fläche jedes Rechtecks den Anteil dieser Variablen in jeder Gruppe darstellt.

# install.packages("graphics")library(graphics)mosaicplot(other_table, main = "Mosaic plot")

Der Spineplot ist ein Spezialfall des Mosaikplots und eine Verallgemeinerung des gestapelten Barplots. Im Gegensatz zu gestapelten Balkenplots wird in diesem Fall jeder Balken zu einem summiert.

spineplot(other_table)

Beachten Sie, dass die Achsen standardmäßig in Bezug auf den gestapelten Balkenplot, den Sie im vorherigen Abschnitt erstellt haben, vertauscht sind. Sie können den entsprechenden Plot erstellen, indem Sie die Häufigkeitstabelle mit der Funktion t transponieren.

spineplot(t(other_table))

Barplot in R: ggplot2

Die Bibliothek ggplot2 ist eine bekannte Grafikbibliothek in R. Sie können mit dieser Bibliothek einen Barplot erstellen, indem Sie die Daten in einen Datenrahmen konvertieren und die Funktionen ggplot und geom_bar verwenden. Im Argument aes müssen Sie die Variablennamen Ihres Datenrahmens übergeben. In x die kategorische Variable und in y die numerische.

# install.packages("ggplot2")library(ggplot2)df <- as.data.frame(my_table)ggplot(data = df, aes(x = cyl, y = Freq)) + geom_bar(stat = "identity")

Horizontaler Balkenplot ggplot2

Wenn Sie den vorherigen Balkenplot drehen möchten, verwenden Sie die Funktion coord_flip wie folgt.

ggplot(data = df, aes(x = cyl, y = Freq)) + geom_bar(stat = "identity") + coord_flip() # Horizontal bar plot

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.