Matplotlib-Funktion hist()


Matplotlib 参考文档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

ParameterTypeBeschreibung
xArray oder Sequenz von ArraysEingabedaten; mehrere Datensätze können übergeben werden.
binsint oder SequenzAnzahl der Bins oder Sequenz der Bin-Grenzen. Standardmäßig wird die Methode 'auto' verwendet, um automatisch auszuwählen.
rangetupleDatenbereich (untere, obere Grenze); Daten außerhalb des Bereichs werden ignoriert.
densityboolWenn True, zeichne ein Wahrscheinlichkeitsdichte-Histogramm (Gesamtfläche gleich 1) statt Anzahlen.
weightsarray-ähnlichGewicht jedes Datenpunkts.
cumulativebool oder -1Wenn True, zeichne ein kumulatives Histogramm; -1 bedeutet kumulativ vom größten zum kleinsten.
histtypestrHistogrammtyp: 'bar' (Standard), 'barstacked' (gestapelt), 'step' (Stufenlinie), 'stepfilled' (gefüllte Stufen).
alignstrBin-Ausrichtung: 'mid' (zentriert, Standard), 'left' (linksbündig), 'right' (rechtsbündig).
orientationstr'vertical' (vertikal, Standard) oder 'horizontal' (horizontal)
rwidthfloatRelative Breite der Balken; 1.0 bedeutet kein Abstand.
logboolWenn True, verwendet die y-Achse eine logarithmische Skala.
colorcolor oder ListeBalkenfarbe
labelstr oder listLegendenbeschriftung
gestapeltboolGibt 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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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).


Matplotlib 参考文档Matplotlib-Referenzdokumentation

Andere Erweiterungen