Python-Kurs / Ergebnisse mit Matplotlib visualisieren und als Diagramm speichern

Mit Matplotlib zeichnen Sie Daten mit ausdrücklich festgelegten Achsen, Einheiten und Beschriftungen. Für den Vergleich zweier Ausgabenkategorien eignet sich ein Balkendiagramm mit sichtbaren Zahlen und einer bei null beginnenden Achse; diese Übung speichert das Ergebnis als Bilddatei ohne ein Grafikfenster.

Zuerst die Vergleichsfrage festlegen

Für Kategoriesummen stehen die Kategorien auf der waagerechten und die Beträge auf der senkrechten Achse. Für eine zeitliche Entwicklung wären dagegen geordnete Datumswerte und eine dazu passende Darstellung erforderlich. Ein Diagramm behebt keine fehlerhafte Aggregation: Prüfen Sie vorher die Werte, ihre Einheiten und eventuell fehlende Datensätze.

Die Beispieldaten lauten 11500 für Lebensmittel und 2500 für Verkehr. Die Einheit bleibt KRW, also koreanischer Won; die Übersetzung des Diagramms enthält keine Währungsumrechnung. Der Kurs zur pandas-Auswertung zeigt, wie Sie solche Summen nachvollziehbar vorbereiten.

Installieren Sie das zusätzliche Paket in der Projektumgebung, in der Sie den Code ausführen:

python -m pip install matplotlib

Die Paketversion muss zu Python und Betriebssystem passen. Die folgenden Operationen werden in der Referenz zur Bildspeicherung beschrieben.

Ein vollständiges Diagramm erstellen und speichern

Verwenden Sie einen neuen Ausgabeordner, weil der Speichervorgang eine gleichnamige Datei ersetzt. Speichern Sie das vollständige Programm als UTF-8-Datei chart.py und starten Sie python chart.py in der gewählten Umgebung. Unter macOS oder Ubuntu kann der Interpreterbefehl außerhalb einer virtuellen Umgebung python3 heißen. Diese erste Fassung erhält die englischen Beschriftungen; die deutsche Anpassung folgt anschließend.

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
plt.rcParams.update({"font.size": 18, "axes.titlesize": 22, "axes.labelsize": 20, "xtick.labelsize": 18, "ytick.labelsize": 18})

categories = ["food", "transport"]
amounts = [11500, 2500]
fig, ax = plt.subplots(figsize=(7, 4), layout="constrained")
bars = ax.bar(categories, amounts, color=["#2b6cb0", "#d69e2e"])
ax.set_ylabel("Amount (KRW)")
ax.set_title("Expenses by category")
ax.set_ylim(0, max(amounts) * 1.2)
ax.bar_label(bars, fmt="%.0f", padding=3)
fig.savefig("expense-chart.png", dpi=160)
plt.close(fig)
print("saved expense-chart.png")

Erwartete Terminalausgabe:

saved expense-chart.png

Die Datei expense-chart.png liegt nun im aktuellen Arbeitsverzeichnis. Die Abmessung von 7 mal 4 Zoll und die Auflösung von 160 Bildpunkten pro Zoll ergeben 1120 mal 640 Pixel. Prüfen Sie nicht nur die Existenz, sondern öffnen Sie das gespeicherte Bild.

ax.bar legt die beiden Höhen fest. bar_label zeigt die Zahlen ohne Nachkommastellen; set_ylim setzt die Untergrenze auf null und lässt oberhalb des höchsten Balkens Platz. Das Ergebnis soll zwei Werte im selben Maßstab vergleichbar machen, nicht bloß eine dekorative Grafik erzeugen.

Figure, Axes und das Backend unterscheiden

Eine Figure ist das gesamte Bild; ein Axes-Objekt enthält hier die Koordinaten und Daten. Die Variablen fig und ax machen deutlich, welche Abbildung beziehungsweise Zeichenfläche geändert wird. Das ist besonders hilfreich, sobald mehrere Diagramme vorhanden sind.

Agg ist ein Backend für die Ausgabe ohne grafische Benutzeroberfläche. Die Auswahl steht vor dem Import von pyplot. Deshalb ist das fehlende Fenster bei diesem Programm beabsichtigt. Ein Desktopfenster setzt ein verfügbares GUI-Backend voraus: Entfernen Sie dafür die Agg-Auswahl und verwenden Sie plt.show() nach dem Speichern und vor dem Schließen der Figure. Eine Umgebung ohne GUI-Unterstützung kann damit trotzdem kein Fenster anzeigen.

plt.close(fig) entfernt die Figure nach dem Speichern aus der Verwaltung von pyplot. Behalten Sie diesen Schritt bei wiederholter Berichtserstellung bei. Die Dokumentation zu Backends erläutert Datei- und Bildschirmausgaben.

Beschriftungen ins Deutsche übertragen und eine Schrift wählen

Erstellen Sie eine Kopie chart_de.py. Ändern Sie darin nur die Kategoriebezeichnungen zu ["Lebensmittel", "Verkehr"], den Achsentext zu "Betrag (KRW)" und den Titel zu "Ausgaben nach Kategorie". Die Beträge, Balkenhöhen und Achsengrenzen bleiben unverändert. Wählen Sie für den Ausgabepfad beispielsweise expense-chart-de.png, damit die englische Vergleichsdatei erhalten bleibt.

Für die hier veröffentlichte deutsche Fassung wurde Noto Sans verwendet und die tatsächlich aufgelöste Schriftdatei geprüft. Das folgende allgemeine Beispiel registriert eine vorhandene Schriftdatei. Es zeigt einen Windows-Pfad zu Malgun Gothic; ersetzen Sie font_path für Ihre deutsche Fassung durch den vollständigen Pfad Ihrer vorhandenen Noto-Sans-Datei. Unter macOS oder Linux verwenden Sie entsprechend einen tatsächlich vorhandenen Dateipfad.

from matplotlib import font_manager
font_path = "C:/Windows/Fonts/malgun.ttf"
font_manager.fontManager.addfont(font_path)
plt.rcParams["font.family"] = font_manager.FontProperties(fname=font_path).get_name()
plt.rcParams["axes.unicode_minus"] = False

Fügen Sie diese Einstellung nach dem Import import matplotlib.pyplot as plt und vor dem Erstellen von fig ein. Prüfen Sie Existenz und Nutzungsbedingungen der Schriftdatei. Bei mehreren installierten Dateien mit demselben Familiennamen belegt der konfigurierte Name allein noch nicht, welche Datei verwendet wurde. Die Referenz zu FontProperties und FontManager erläutert Registrierung und Auswahl.

Dieses Bild wurde mit den beschriebenen deutschen Beschriftungen tatsächlich erzeugt. Die beiden Zahlen bleiben in KRW auf derselben bei null beginnenden Achse:

Balkendiagramm mit Lebensmitteln von 11.500 KRW und Verkehr von 2.500 KRW auf derselben bei null beginnenden Achse.

Lesbarkeit und unveränderte Vergleichswerte prüfen

  1. Öffnen Sie das gespeicherte PNG und prüfen Sie zwei Balken, die Beschriftungen 11500 und 2500, die Einheit KRW sowie den Nullpunkt der senkrechten Achse.
  2. Ändern Sie in einer separaten Kopie nur figsize=(7, 4) in figsize=(4, 4). Prüfen Sie abgeschnittene Titel und zusammenrückende Kategorietexte. layout="constrained" garantiert nicht, dass beliebig lange Texte in jede Breite passen.
  3. Stellen Sie die ursprünglichen 7 mal 4 Zoll wieder her und erzeugen Sie das Bild erneut. Titel und Kategorien sollen wieder vollständig lesbar sein, während die Werte und Balkenhöhen gleich bleiben.
  4. Betrachten Sie das Bild auch in einer schmalen mobilen Darstellung. Falls Texte zu klein werden, passen Sie Bildgröße, Schriftgrößen oder Beschriftung an, ohne die Bedeutung der Zahlen zu verändern.

savefig überschreibt denselben Dateipfad. Für mehrere Berichtsversionen verwenden Sie daher Namen mit Datum oder Laufkennung. Das PNG ist die direkte Übungsausgabe; die hier eingebundene Veröffentlichung wurde nach der visuellen Kontrolle verlustfrei in WebP umgewandelt.

Kürzen Sie die Balkenachse nicht, um Unterschiede größer erscheinen zu lassen, und verwenden Sie keine dekorativen Flächen, die den Zahlen widersprechen. Sichtbare Werte, eine ausdrücklich genannte Einheit und lesbare Beschriftungen machen die Darstellung überprüfbar.