Matplotlib Balkendiagramm: Vollständige Anleitung zu plt.bar() und plt.barh()
Updated on
Balkendiagramme sind die gebräuchlichste Methode, um Mengen über Kategorien hinweg zu vergleichen. Umsatz nach Quartal, Bewertungen nach Schüler, Anzahl nach Status -- Balkendiagramme machen diese Vergleiche sofort lesbar. Aber effektive Balkendiagramme in Matplotlib zu erstellen erfordert mehr als einen einfachen plt.bar()-Aufruf. Sie müssen gruppierte Vergleiche, gestapelte Kompositionen, horizontale Layouts für lange Beschriftungen und ordnungsgemäße Annotationen handhaben, die Diagramme selbsterklärend machen.
Dieser Leitfaden deckt jedes Balkendiagramm-Muster ab, das Sie in Matplotlib benötigen, von einfachen vertikalen Balken bis hin zu fortgeschrittenen gruppierten und gestapelten Konfigurationen.
Einfaches vertikales Balkendiagramm
import matplotlib.pyplot as plt
categories = ['Python', 'JavaScript', 'Java', 'C++', 'Go']
values = [35, 28, 22, 15, 12]
plt.figure(figsize=(8, 5))
plt.bar(categories, values, color='steelblue', edgecolor='black', linewidth=0.5)
plt.xlabel('Sprache')
plt.ylabel('Beliebtheitswert')
plt.title('Beliebtheit von Programmiersprachen')
plt.show()Horizontales Balkendiagramm mit plt.barh()
Verwenden Sie horizontale Balken, wenn die Kategoriebeschriftungen lang sind oder wenn Sie viele Kategorien haben:
import matplotlib.pyplot as plt
frameworks = ['React', 'Vue.js', 'Angular', 'Svelte', 'Next.js',
'Django', 'Flask', 'FastAPI', 'Express', 'Rails']
stars = [220, 207, 95, 78, 124, 78, 67, 74, 64, 55]
plt.figure(figsize=(10, 6))
plt.barh(frameworks, stars, color='#3498db', edgecolor='white')
plt.xlabel('GitHub Stars (Tausende)')
plt.title('Framework-Beliebtheit nach GitHub Stars')
plt.gca().invert_yaxis() # Höchste oben
plt.tight_layout()
plt.show()Farben anpassen
import matplotlib.pyplot as plt
categories = ['Q1', 'Q2', 'Q3', 'Q4']
revenue = [120, 150, 180, 200]
# Verschiedene Farbe pro Balken
colors = ['#e74c3c', '#f39c12', '#2ecc71', '#3498db']
plt.figure(figsize=(8, 5))
bars = plt.bar(categories, revenue, color=colors, edgecolor='black', linewidth=0.5)
plt.ylabel('Umsatz ($K)')
plt.title('Quartalsumsatz')
plt.show()Wertbeschriftungen auf Balken hinzufügen
import matplotlib.pyplot as plt
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 78, 32]
plt.figure(figsize=(8, 5))
bars = plt.bar(categories, values, color='steelblue')
# Wertbeschriftungen über jedem Balken hinzufügen
for bar, val in zip(bars, values):
plt.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 1,
str(val), ha='center', va='bottom', fontsize=11)
plt.ylabel('Wert')
plt.title('Balkendiagramm mit Wertbeschriftungen')
plt.show()Gruppiertes Balkendiagramm
Vergleichen Sie mehrere Serien nebeneinander:
import matplotlib.pyplot as plt
import numpy as np
categories = ['Q1', 'Q2', 'Q3', 'Q4']
product_a = [20, 35, 30, 35]
product_b = [25, 32, 34, 20]
product_c = [15, 20, 25, 30]
x = np.arange(len(categories))
width = 0.25
plt.figure(figsize=(10, 6))
plt.bar(x - width, product_a, width, label='Produkt A', color='#e74c3c')
plt.bar(x, product_b, width, label='Produkt B', color='#3498db')
plt.bar(x + width, product_c, width, label='Produkt C', color='#2ecc71')
plt.xlabel('Quartal')
plt.ylabel('Umsatz ($K)')
plt.title('Quartalsumsatz nach Produkt')
plt.xticks(x, categories)
plt.legend()
plt.tight_layout()
plt.show()Gestapeltes Balkendiagramm
Zeigen Sie die Zusammensetzung jeder Kategorie:
import matplotlib.pyplot as plt
quarters = ['Q1', 'Q2', 'Q3', 'Q4']
mobile = [30, 35, 40, 45]
desktop = [50, 45, 35, 30]
tablet = [20, 20, 25, 25]
plt.figure(figsize=(8, 6))
plt.bar(quarters, mobile, label='Mobil', color='#3498db')
plt.bar(quarters, desktop, bottom=mobile, label='Desktop', color='#e74c3c')
# Für den dritten Stapel kumulativen Boden berechnen
import numpy as np
bottom_2 = np.array(mobile) + np.array(desktop)
plt.bar(quarters, tablet, bottom=bottom_2, label='Tablet', color='#2ecc71')
plt.ylabel('Traffic (%)')
plt.title('Traffic-Quellen nach Quartal')
plt.legend()
plt.show()Fehlerbalken
import matplotlib.pyplot as plt
import numpy as np
categories = ['Kontrolle', 'Behandlung A', 'Behandlung B', 'Behandlung C']
means = [10.2, 15.8, 14.3, 18.1]
errors = [1.2, 2.1, 1.8, 2.5]
plt.figure(figsize=(8, 5))
plt.bar(categories, means, yerr=errors, capsize=5,
color='steelblue', edgecolor='black', linewidth=0.5)
plt.ylabel('Antwortwert')
plt.title('Behandlungseffekte mit Fehlerbalken')
plt.show()plt.bar() Parameterreferenz
| Parameter | Typ | Beschreibung |
|---|---|---|
x | array-ähnlich | Balkenpositionen (Kategorien) |
height | array-ähnlich | Balkenhöhen (Werte) |
width | float | Balkenbreite (Standard 0.8) |
bottom | array-ähnlich | Y-Koordinate der Balkenbasis (zum Stapeln) |
color | Farbe oder Array | Balkenfüllfarbe(n) |
edgecolor | Farbe | Balkenrandfarbe |
linewidth | float | Randlinienbreite |
yerr / xerr | array-ähnlich | Fehlerbalkengrößen |
capsize | float | Fehlerbalken-Kappenbreite |
align | str | Balkenausrichtung ('center' oder 'edge') |
label | str | Legende-Beschriftung |
alpha | float | Transparenz (0-1) |
Interaktive Balkendiagramme mit PyGWalker
Für explorative Datenanalyse ermöglicht PyGWalker (opens in a new tab) das Erstellen interaktiver Balkendiagramme durch Drag-and-Drop von Spalten aus Ihrem DataFrame in Jupyter:
import pandas as pd
import pygwalker as pyg
df = pd.DataFrame({
'Quarter': ['Q1', 'Q2', 'Q3', 'Q4'] * 3,
'Product': ['A'] * 4 + ['B'] * 4 + ['C'] * 4,
'Sales': [20, 35, 30, 35, 25, 32, 34, 20, 15, 20, 25, 30]
})
walker = pyg.walk(df)FAQ
Wie erstelle ich ein Balkendiagramm in Matplotlib?
Verwenden Sie plt.bar(kategorien, werte) für vertikale Balken oder plt.barh(kategorien, werte) für horizontale Balken. Übergeben Sie Listen oder Arrays für Kategorien und ihre entsprechenden Werte. Fügen Sie plt.xlabel(), plt.ylabel() und plt.title() für Beschriftungen hinzu.
Wie erstelle ich ein gruppiertes Balkendiagramm?
Verwenden Sie np.arange() für x-Positionen und verschieben Sie jede Gruppe um die Balkenbreite. Rufen Sie plt.bar() mehrmals mit verschobenen x-Positionen auf: plt.bar(x - width, data1, width), plt.bar(x, data2, width), usw. Setzen Sie Tick-Beschriftungen mit plt.xticks(x, kategorien).
Wie füge ich Wertbeschriftungen über Balken hinzu?
Iterieren Sie über die Balkenobjekte und verwenden Sie plt.text(). Berechnen Sie für jeden Balken die mittlere x-Position mit bar.get_x() + bar.get_width() / 2 und die y-Position mit bar.get_height(). Verwenden Sie ha='center' für die horizontale Ausrichtung.
Wie erstelle ich ein gestapeltes Balkendiagramm?
Verwenden Sie den bottom-Parameter bei aufeinanderfolgenden plt.bar()-Aufrufen. Der erste Aufruf hat kein bottom. Der zweite Aufruf verwendet den ersten Datensatz als bottom. Für einen dritten Stapel summieren Sie die ersten beiden Datensätze als bottom.
Wann sollte ich horizontale vs. vertikale Balkendiagramme verwenden?
Verwenden Sie horizontale Balken (plt.barh()), wenn Kategoriebeschriftungen lang sind, wenn Sie viele Kategorien haben (mehr als 8-10), oder wenn Sie mit einer Basislinie vergleichen. Verwenden Sie vertikale Balken (plt.bar()) für Zeitreihen-Kategorien (Monate, Quartale) oder wenn Sie wenige Kategorien mit kurzen Beschriftungen haben.
Fazit
Matplotlibs plt.bar() und plt.barh() decken jeden Balkendiagramm-Bedarf ab: grundlegende Vergleiche, gruppierte Multi-Serien, gestapelte Kompositionen und annotierte Präsentationen. Für gruppierte Balken verschieben Sie x-Positionen mit np.arange(). Für gestapelte Balken verwenden Sie den bottom-Parameter. Fügen Sie immer Wertbeschriftungen für Klarheit hinzu und wählen Sie ein horizontales Layout, wenn Beschriftungen lang sind.