Matplotlib-Funktion hist()
Matplotlib-Referenzdokumentation
hist()Wird verwendet, um ein Histogramm zu zeichnen, indem Daten in mehrere Intervalle (Bins) aufgeteilt und die Häufigkeit des Auftretens von Daten in jedem Intervall gezählt wird.
Histogramme sind grundlegende Werkzeuge zur Untersuchung der Datenverteilung (zentrale Tendenz, Streuung, Schiefe usw.).
Funktionsdefinition
pyplot-Schnittstelle
matplotlib.pyplot.hist(x, bins=None, range=None, density=False,
weights=None, cumulative=False, bottom=None, histtype='bar',
align='mid', orientation='vertical', rwidth=None, log=False,
color=None, label=None, stacked=False, **kwargs)
Axes-Schnittstelle
Axes.hist(x, bins=None, range=None, density=False, weights=None,
cumulative=False, bottom=None, histtype='bar', align='mid',
orientation='vertical', rwidth=None, log=False, color=None,
label=None, stacked=False, **kwargs)
Parameterbeschreibung
| Parameter | Type | Beschreibung |
|---|---|---|
| x | Array oder Sequenz von Arrays | Eingabedaten; mehrere Datensätze können übergeben werden. |
| bins | int oder Sequenz | Anzahl der Bins oder Sequenz der Bin-Grenzen. Standardmäßig wird die Methode 'auto' verwendet, um automatisch auszuwählen. |
| range | tuple | Datenbereich (untere, obere Grenze); Daten außerhalb des Bereichs werden ignoriert. |
| density | bool | Wenn True, zeichne ein Wahrscheinlichkeitsdichte-Histogramm (Gesamtfläche gleich 1) statt Anzahlen. |
| weights | array-ähnlich | Gewicht jedes Datenpunkts. |
| cumulative | bool oder -1 | Wenn True, zeichne ein kumulatives Histogramm; -1 bedeutet kumulativ vom größten zum kleinsten. |
| histtype | str | Histogrammtyp: 'bar' (Standard), 'barstacked' (gestapelt), 'step' (Stufenlinie), 'stepfilled' (gefüllte Stufen). |
| align | str | Bin-Ausrichtung: 'mid' (zentriert, Standard), 'left' (linksbündig), 'right' (rechtsbündig). |
| orientation | str | 'vertical' (vertikal, Standard) oder 'horizontal' (horizontal) |
| rwidth | float | Relative Breite der Balken; 1.0 bedeutet kein Abstand. |
| log | bool | Wenn True, verwendet die y-Achse eine logarithmische Skala. |
| color | color oder Liste | Balkenfarbe |
| label | str oder list | Legendenbeschriftung |
| gestapelt | bool | Gibt an, ob mehrere Datensätze gestapelt angezeigt werden sollen. |
Der Rückgabewert von hist() ist ein Tupel aus drei Elementen:
(n, bins, patches)n ist die Anzahl/Dichte jedes Bins, bins sind die Bin-Kanten, und patches sind die gezeichneten Balkenobjekte.
Anwendungsbeispiele
Beispiel 1: Einfaches Histogramm
Beispiel
import numpy as np
# Normalverteilte Zufallsdaten generieren
np.random.seed(42)
data = np.random.randn(1000)
fig, ax = plt.subplots(layout='constrained')
# Histogramm zeichnen
n, bins, patches = ax.hist(data, bins=30,
color='steelblue', edgecolor='white')
# Das Bin hervorheben, das den Maximalwert enthält
max_idx = np.argmax(n)
patches[max_idx].set_facecolor('#e74c3c')
ax.set_title('Histogramm der Normalverteilung')
ax.set_xlabel('Wert')
ax.set_ylabel('Häufigkeit')
ax.axvline(x=0, color='red', linestyle='--', alpha=0.7)
ax.grid(axis='y', alpha=0.3)
plt.show()
Beispiel 2: Vergleichshistogramm mehrerer Datensätze
Beispiel
import numpy as np
np.random.seed(42)
# Drei Datensätze mit unterschiedlichen Verteilungen
data1 = np.random.normal(0, 1, 1000) # Standardnormalverteilung
data2 = np.random.normal(2, 1.5, 800) # Mittelwert=2, std=1.5
data3 = np.random.normal(-1, 0.5, 600) # Mittelwert=-1, std=0.5
fig, ax = plt.subplots(figsize=(8, 5), layout='constrained')
# Mehrere Datensätze mit Transparenz und unterschiedlichen Farben vergleichen
ax.hist(data1, bins=30, alpha=0.6, color='steelblue',
label='N(0, 1)', edgecolor='white')
ax.hist(data2, bins=30, alpha=0.6, color='coral',
label='N(2, 1.5)', edgecolor='white')
ax.hist(data3, bins=30, alpha=0.6, color='mediumseagreen',
label='N(-1, 0.5)', edgecolor='white')
ax.set_title('Vergleich mehrerer Verteilungen')
ax.set_xlabel('Wert')
ax.set_ylabel('Häufigkeit')
ax.legend()
ax.grid(axis='y', alpha=0.3)
plt.show()
Beispiel 3: Dichte-Histogramm + angepasste Kurve
Beispiel
import numpy as np
np.random.seed(42)
data = np.random.randn(1000)
fig, ax = plt.subplots(figsize=(8, 5), layout='constrained')
# density=True zeichnet die Wahrscheinlichkeitsdichte (anstelle von Zählwerten)
ax.hist(data, bins=30, density=True, Alpha=0.7,
color='steelblue', edgecolor='white', label='Datenhistogramm')
# Theoretische Normalverteilungskurve überlagern
from scipy import stats
x = np.linspace(-4, 4, 200)
pdf = stats.norm.pdf(x, loc=0, scale=1)
ax.plot(x, pdf, 'r-', linewidth=2, label='Theoretische N(0,1)-PDF')
ax.set_title('Dichtehistogramm mit PDF-Kurve')
ax.set_xlabel('Wert')
ax.set_ylabel('Wahrscheinlichkeitsdichte')
ax.legend()
ax.grid(axis='y', alpha=0.3)
plt.show()
Beispiel 4: Kumulatives Histogramm
Beispiel
import numpy as np
np.random.seed(42)
data = np.random.randn(500)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
layout='constrained')
# Linker Plot: reguläres Histogramm
ax1.hist(data, bins=30, color='steelblue', edgecolor='white')
ax1.set_title('Standard-Histogramm')
ax1.set_xlabel('Wert')
ax1.set_ylabel('Häufigkeit')
# Rechter Plot: kumulatives Histogramm
ax2.hist(data, bins=30, cumulative=True, color='coral',
edgecolor='white')
ax2.set_title('Kumulatives Histogramm')
ax2.set_xlabel('Wert')
ax2.set_ylabel('Kumulative Häufigkeit')
plt.show()
Beispiel 5: Stufenhistogramm
Beispiel
import numpy as np
np.random.seed(42)
data = np.random.exponential(scale=2, size=500)
fig, ax = plt.subplots(layout='constrained')
# histtype='stepfilled' zeichnet ein gefülltes Stufenhistogramm
ax.hist(data, bins=30, histtype='stepfilled',
color='#3498db', alpha=0.6, edgecolor='black',
linewidth=1, label='Gefüllte Stufen')
# Stufenlinie überlagern
ax.hist(data, bins=30, histtype='step',
color='black', linewidth=2, label='Stufenumriss')
ax.set_title('Stufen-Histogramm (histtype)')
ax.set_xlabel('Wert')
ax.set_ylabel('Häufigkeit')
ax.legend()
ax.grid(axis='y', alpha=0.3)
plt.show()
print("Beispiel: Stufenhistogramm angezeigt")
FAQ
Wie wählt man den Parameter bins?
Zu wenige verlieren Datenmerkmale, zu viele erzeugen Rauschen.
Faustregeln:sqrt(n)(Quadratwurzelregel),log2(n)+1(Sturges-Regel), oder verwenden Sie einfach die standardmäßige automatische Auswahl 'auto'.
Was bedeutet density=True?
Es werden keine Zählwerte zurückgegeben; stattdessen wird die Gesamtfläche des Histogramms auf 1 gesetzt, wodurch eine Schätzung der Wahrscheinlichkeitsdichte entsteht. Geeignet zum Vergleich mit Wahrscheinlichkeitsdichtefunktionen (PDF).
Andere Erweiterungen