Matplotlib-Histogramme

MatplotlibBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie Histogramme mit Matplotlib, einer der beliebtesten Datenvisualisierungsbibliotheken in Python, erstellen und anpassen. Ein Histogramm ist ein leistungsstarkes Werkzeug zur Visualisierung der Verteilung eines numerischen Datensatzes. Es gruppiert Zahlen in Bereiche (oder "Bins") und zeigt die Häufigkeit von Datenpunkten an, die in jeden Bin fallen.

Sie werden die folgenden Schritte durchlaufen:

  1. Generieren von Beispieldaten mit NumPy.
  2. Erstellen eines grundlegenden Histogramms.
  3. Anpassen der Anzahl der Bins.
  4. Ändern der Farbe und des Randstils der Histogrammbalken.
  5. Normalisieren des Histogramms zur Anzeige der Wahrscheinlichkeitsdichte.

Am Ende dieses Labs werden Sie in der Lage sein, informative und visuell ansprechende Histogramme für Ihre Datenanalyseprojekte zu erstellen. Alle Plots werden als Bilddateien gespeichert, die Sie direkt in der LabEx WebIDE anzeigen können.

Beispieldaten mit numpy.random generieren

In diesem Schritt generieren Sie einen Satz von Beispieldaten, die wir zum Plotten eines Histogramms verwenden können. Wir werden die NumPy-Bibliothek verwenden, ein grundlegendes Paket für wissenschaftliches Rechnen in Python. Sie bietet ein leistungsstarkes mehrdimensionales Array-Objekt und Werkzeuge für die Arbeit mit diesen Arrays.

Wir werden die Funktion numpy.random.normal() verwenden, um Daten zu generieren, die einer Normalverteilung (oder Gauß-Verteilung) folgen. Dies ist eine gängige Art der Datenverteilung, die in vielen realen Szenarien vorkommt.

Öffnen Sie zuerst die Datei main.py im Dateiexplorer auf der linken Seite der WebIDE. Fügen Sie dann den folgenden Code hinzu. Dieser Code importiert die numpy-Bibliothek und generiert 1000 Zufallszahlen mit einem Mittelwert von 0 und einer Standardabweichung von 1.

import numpy as np

## Generiere 1000 Datenpunkte aus einer Normalverteilung
## mit einem Mittelwert (loc) von 0 und einer Standardabweichung (scale) von 1.
data = np.random.normal(loc=0, scale=1, size=1000)

print("Beispieldaten erfolgreich generiert.")

Um das Skript auszuführen, öffnen Sie ein Terminal in der WebIDE (Terminal -> New Terminal) und führen Sie den folgenden Befehl aus. Ihr Arbeitsverzeichnis ist bereits /home/labex/project.

python3 main.py

Sie sehen eine Bestätigungsnachricht im Terminal.

Beispieldaten erfolgreich generiert.

Die Variable data in Ihrem Skript enthält nun ein Array mit 1000 Zahlen, bereit für die Visualisierung im nächsten Schritt.

Histogramm mit plt.hist(data) plotten

In diesem Schritt erstellen Sie Ihr erstes Histogramm. Wir verwenden das Modul matplotlib.pyplot, das eine einfache Schnittstelle zur Erstellung von Plots bietet. Es wird üblicherweise mit dem Alias plt importiert.

Die Kernfunktion zum Erstellen eines Histogramms ist plt.hist(). In seiner einfachsten Form nimmt es ein einziges Argument entgegen: das Array der Daten, das Sie plotten möchten.

Da wir uns in einer nicht-interaktiven Umgebung befinden, können wir den Plot nicht direkt mit plt.show() anzeigen. Stattdessen müssen wir den Plot mit plt.savefig() in eine Datei speichern.

Aktualisieren Sie Ihre main.py-Datei mit dem folgenden Code. Er fügt die Matplotlib-Plotting-Logik zum Code zur Datengenerierung aus dem vorherigen Schritt hinzu.

import numpy as np
import matplotlib.pyplot as plt

## Generiere Beispieldaten
data = np.random.normal(loc=0, scale=1, size=1000)

## Erstelle ein Histogramm
plt.hist(data)

## Speichere den Plot in einer Datei
plt.savefig('/home/labex/project/histogram.png')

print("Einfaches Histogramm in histogram.png gespeichert")

Führen Sie das Skript nun erneut vom Terminal aus:

python3 main.py

Sie sollten die folgende Ausgabe sehen:

Einfaches Histogramm in histogram.png gespeichert

Eine neue Datei namens histogram.png wird im Dateiexplorer auf der linken Seite erscheinen. Doppelklicken Sie darauf, um Ihr erstes Histogramm zu öffnen und anzuzeigen. Es zeigt die Häufigkeitsverteilung der von Ihnen generierten Zufallsdaten.

Histogramm

Anzahl der Bins mit dem Parameter 'bins' festlegen

In diesem Schritt lernen Sie, wie Sie die Granularität Ihres Histogramms durch Festlegen der Anzahl der Bins steuern können. Ein "Bin" ist ein Intervall, das einen Datenbereich darstellt. Die Anzahl der Bins kann erheblich beeinflussen, wie die Verteilung interpretiert wird. Zu wenige Bins können wichtige Details verbergen, während zu viele einen verrauschten Plot erzeugen können.

Die Funktion plt.hist() von Matplotlib verfügt über einen Parameter bins, mit dem Sie die Anzahl der Bins angeben können. Standardmäßig wählt Matplotlib eine angemessene Anzahl, aber oft möchten Sie diese anpassen.

Lassen Sie uns den Code ändern, um ein Histogramm mit 30 Bins zu erstellen. Wir werden es auch in einer neuen Datei, histogram_bins.png, speichern, um es mit dem vorherigen Plot zu vergleichen.

Aktualisieren Sie Ihre main.py-Datei wie folgt:

import numpy as np
import matplotlib.pyplot as plt

## Generiere Beispieldaten
data = np.random.normal(loc=0, scale=1, size=1000)

## Erstelle ein Histogramm mit 30 Bins
plt.hist(data, bins=30)

## Speichere den Plot in einer neuen Datei
plt.savefig('/home/labex/project/histogram_bins.png')

print("Histogramm mit 30 Bins in histogram_bins.png gespeichert")

Führen Sie das Skript im Terminal aus:

python3 main.py

Die Ausgabe wird sein:

Histogramm mit 30 Bins in histogram_bins.png gespeichert

Suchen Sie nun histogram_bins.png im Dateiexplorer und öffnen Sie es. Vergleichen Sie es mit dem ersten Histogramm. Sie sollten feststellen, dass die Balken schmaler sind und eine detailliertere Ansicht der Datenverteilung bieten.

Histogramm mit 30 Bins

Histogrammfarbe und Randfarbe anpassen

In diesem Schritt passen Sie das visuelle Erscheinungsbild des Histogramms an. Ein gut gestalteter Plot ist leichter zu lesen und professioneller. Die Funktion plt.hist() bietet mehrere Parameter für das Styling, darunter color für die Füllung der Balken und edgecolor für die Ränder der Balken.

Wir ändern die Farbe der Balken zu einem Hellblau und fügen schwarze Ränder hinzu, damit jeder Bin deutlicher hervorgehoben wird.

Ändern Sie Ihre main.py-Datei, um diese neuen Parameter einzufügen. Wir werden diesen angepassten Plot in histogram_color.png speichern.

import numpy as np
import matplotlib.pyplot as plt

## Generiere Beispieldaten
data = np.random.normal(loc=0, scale=1, size=1000)

## Erstelle ein Histogramm mit 30 Bins, benutzerdefinierter Farbe und Randfarbe
plt.hist(data, bins=30, color='skyblue', edgecolor='black')

## Speichere den Plot in einer neuen Datei
plt.savefig('/home/labex/project/histogram_color.png')

print("Gestyltes Histogramm in histogram_color.png gespeichert")

Führen Sie das Skript im Terminal aus:

python3 main.py

Sie sehen diese Nachricht:

Gestyltes Histogramm in histogram_color.png gespeichert

Öffnen Sie die neu erstellte Datei histogram_color.png. Sie sehen ein deutlich professionelleres Histogramm mit hellblauen Balken und deutlichen schwarzen Umrissen.

Gestyltes Histogramm

Histogramm mit density=True normalisieren

In diesem Schritt lernen Sie, wie Sie ein normalisiertes Histogramm erstellen. Standardmäßig stellt die y-Achse eines Histogramms die Anzahl der Datenpunkte in jedem Bin dar. Manchmal ist es jedoch nützlicher, die Verteilung als Wahrscheinlichkeitsdichte zu betrachten. In einem normalisierten Histogramm wird die Höhe jedes Balkens so angepasst, dass die Gesamtfläche aller Balken 1 ergibt.

Dies wird erreicht, indem der Parameter density in der Funktion plt.hist() auf True gesetzt wird. Es ist auch eine gute Praxis, Ihrem Plot Beschriftungen und einen Titel hinzuzufügen, um ihn selbsterklärend zu machen.

Aktualisieren wir das Skript, um ein normalisiertes Histogramm zu erstellen und beschreibende Beschriftungen hinzuzufügen.

import numpy as np
import matplotlib.pyplot as plt

## Generiere Beispieldaten
data = np.random.normal(loc=0, scale=1, size=1000)

## Erstelle ein normalisiertes Histogramm
plt.hist(data, bins=30, color='skyblue', edgecolor='black', density=True)

## Titel und Achsenbeschriftungen hinzufügen
plt.title('Normalisiertes Histogramm von Beispieldaten')
plt.xlabel('Wert')
plt.ylabel('Wahrscheinlichkeitsdichte')

## Speichere den Plot in einer neuen Datei
plt.savefig('/home/labex/project/histogram_normalized.png')

print("Normalisiertes Histogramm in histogram_normalized.png gespeichert")

Führen Sie die endgültige Version Ihres Skripts aus:

python3 main.py

Die Ausgabe wird sein:

Normalisiertes Histogramm in histogram_normalized.png gespeichert

Öffnen Sie histogram_normalized.png. Beachten Sie, dass die Werte auf der y-Achse jetzt viel kleiner sind. Sie stellen die Wahrscheinlichkeitsdichte dar, nicht die Rohdaten. Die Gesamtform der Verteilung bleibt gleich, aber die Skalierung ist nun standardisiert, was nützlich ist, um Verteilungen von Datensätzen unterschiedlicher Größe zu vergleichen.

Normalisiertes Histogramm

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss dieses Labs! Sie haben die wesentlichen Fähigkeiten für die Erstellung und Anpassung von Histogrammen mit Matplotlib in Python erlernt.

In diesem Lab haben Sie:

  • Beispieldaten mit numpy.random.normal() generiert.
  • Ein einfaches Histogramm mit plt.hist() geplottet.
  • Die Anzahl der Bins mit dem Parameter bins gesteuert.
  • Ihr Histogramm mit den Parametern color und edgecolor gestaltet.
  • Ein normalisiertes Wahrscheinlichkeitsdichte-Histogramm mit density=True erstellt.
  • Ihrem Plot einen Titel und Achsenbeschriftungen für besseren Kontext hinzugefügt.

Histogramme sind ein grundlegendes Werkzeug in der Datenexploration und -analyse. Die hier erlernten Techniken ermöglichen es Ihnen, die Verteilung Ihrer eigenen Datensätze effektiv zu visualisieren. Experimentieren Sie gerne weiter mit anderen Parametern und Plot-Typen in Matplotlib.