Direkt zum Inhalt

Matplotlib Zeitreihen-Liniendiagramm

In diesem Tutorial erfährst du, wie du in matplotlib Linienplots für Zeitreihen erstellen und anpassen kannst.
Aktualisierte 16. Jan. 2025  · 8 Min. Lesezeit

Eine Zeitreihe ist eine Sammlung von Datenbeobachtungen, die durch die Zeit in chronologischer Reihenfolge indiziert sind. Diese Daten werden in der Regel (aber nicht unbedingt) in regelmäßigen Abständen aufgezeichnet. Zeitreihen werden häufig im Bankwesen, im Handel, im Marketing, in der Wissenschaft und in anderen Branchen verwendet. Die typischste visuelle Darstellung von Zeitreihendaten ist ein Liniendiagramm, bei dem die Zeit auf die x-Achse und der Messwert auf die y-Achse gelegt wird.

In diesem Lernprogramm lernen wir, wie man mit matplotlib, einer wichtigen Python-Bibliothek für die Darstellung von Zeitreihen, Linienplots erstellt und anpasst.

Erste Schritte mit matplotlib Zeitreihenplottern

Bibliotheken importieren und die Daten laden

Zuerst importieren wir die notwendigen Python-Bibliotheken und laden die Daten - einen Kaggle-Datensatz Tägliche Wechselkurse pro Euro 1999-2023. Wir werden auch einige grundlegende Datenbereinigungen vornehmen:

import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime

df = pd.read_csv('euro-daily-hist_1999_2022.csv')
df = df.iloc[:, [0, 4, 28, -2]]
df.columns = ['Date', 'CAD', 'NZD', 'USD']

for col in ['CAD', 'NZD', 'USD']:
    df = df[df[col] != '-']
    df[col] = pd.to_numeric(df[col])
   
df = df[df['Date'] >= '2022-12-01'].reset_index(drop=True)
print(df.head(3))
print(f'\nThe date range: {df.Date.min()}/{ df.Date.max()}')

Output:

Date     CAD     NZD     USD
0  2023-01-27  1.4479  1.6759  1.0865
1  2023-01-26  1.4568  1.6799  1.0895
2  2023-01-25  1.4544  1.6792  1.0878

The date range: 2022-12-01/2023-01-27

Konvertierung von Datum/Zeit-Strings in datetime-Objekte

Um effizient mit Zeitreihen zu arbeiten, müssen wir Datums- oder Zeitstrings mit der Funktion pandas.to_datetime in Datetime-Objekte umwandeln:

df['Date'] = pd.to_datetime(df['Date'])
print(df['Date'].dtypes)

Output:

datetime64[ns]

Wenn du eine Auffrischung brauchst, wie du mit Zeitreihen in Python arbeitest, kannst du den Kurs Manipulating Time Series Data in Python nutzen.

Festlegen einer Datumsspalte als DataFrame-Index

Jetzt setzen wir die Spalte Date als DataFrame-Index mit der Methode set_index:

df = df.set_index('Date')
print(df.head(3))

Output:

              CAD     NZD     USD
Date                             
2023-01-27  1.4479  1.6759  1.0865
2023-01-26  1.4568  1.6799  1.0895
2023-01-25  1.4544  1.6792  1.0878

Erstellen eines einfachen einzeiligen Matplotlib-Zeitreihenplots

Um eine einfache Zeitreihengrafik zu erstellen, verwenden wir die Standardmethode matplotlib.pyplot.plot(x, y):

plt.plot(df.index, df['CAD'])

Output:

image1.png

Erstellen einer mehrzeiligen Matplotlib-Zeitreihengrafik

Um eine mehrzeilige Zeitreihendarstellung zu erstellen, führen wir einfach die matplotlib.pyplot.plot(x, y) Methode so oft wie nötig:

plt.plot(df.index, df['CAD'])
plt.plot(df.index, df['NZD'])
plt.plot(df.index, df['USD'])

image4.png

Durch die Verwendung der for-Schleife wird der obige Code optimiert:

for col in ['CAD', 'NZD', 'USD']:
    plt.plot(df.index, df[col])

Output: 

image4.png

Matplotlib-Zeitreihenplots anpassen

Um unser Zeitreihen-Diagramm lesbarer und überzeugender zu machen, müssen wir es anpassen. Wir können einige gängige Matplotlib-Anpassungen vornehmen, z. B. die Größe der Abbildung anpassen, einen Diagrammtitel und Achsenbeschriftungen hinzufügen und anpassen, die Linieneigenschaften ändern, Markierungen hinzufügen und anpassen usw. Andere Anpassungen sind spezifisch für Zeitreihendiagramme, z. B. das Anpassen von Zeitachsen-Ticks und deren Beschriftungen oder das Hervorheben bestimmter Zeiträume.

Anpassen der Figur und der Achsen

Mit den Standard-Matplotlib-Methoden können wir die Abbildung und die Achsen eines Zeitreihen-Diagramms auf viele Arten anpassen, wie in den Code-Kommentaren unten beschrieben:

# Adjusting the figure size
fig = plt.subplots(figsize=(16, 5))

# Creating a plot
plt.plot(df.index, df['CAD'])

# Adding a plot title and customizing its font size
plt.title('EUR-CAD rate', fontsize=20)

# Adding axis labels and customizing their font size
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)

# Rotaing axis ticks and customizing their font size
plt.xticks(rotation=30, fontsize=15)

# Changing the plot resolution - zooming in the period from 15.12.2022 till 15.01.2023
plt.xlim(pd.Timestamp('2022-12-15'), pd.Timestamp('2023-01-15'))

Ausgabe: 

image8.png

Anpassen der Linieneigenschaften

Wie bei gewöhnlichen Liniendiagrammen ist es möglich, die Linieneigenschaften eines Zeitreihen-Liniendiagramms zu ändern, z. B. die Linienfarbe, den Stil oder die Breite:

plt.plot(df.index, df['CAD'], color='green', linestyle='dashed', linewidth=3)

Ausgabe:

image5.png

Hinzufügen und Anpassen von Markern

Wie bei jedem Liniendiagramm können wir auch bei einem Zeitreihen-Liniendiagramm Markierungen setzen und deren Symbol, Farbe, Randfarbe und Größe anpassen:

plt.plot(df.index, df['CAD'], marker='o', markerfacecolor='yellow', markeredgecolor='red', markersize=8)

image9.png

Anpassen der Ticks der Zeitachse

Erstellen wir zunächst ein einfaches Matplotlib-Zeitreihen-Diagramm mit einigen wichtigen Anpassungen:

fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())

Ausgabe: 

image7.png

Wir sehen, dass Matplotlib standardmäßig einige zufällige Zecken zusammen mit ihren Beschriftungen anzeigt. Wir möchten aber vielleicht die Kontrolle darüber übernehmen, welche Ticks auf der Zeitachse angezeigt werden. In diesem Fall müssen wir der Methode matplotlib.pyplot.xticks eine Liste mit den erforderlichen Daten (oder Zeiten) als Strings oder Pandas-Zeitstempel übergeben:

fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())

# Defining and displaying time axis ticks
ticks = ['2022-12-05', '2023-01-02', '2023-01-20']
plt.xticks(ticks)

Output: 

image6.png

Oben hat Matplotlib die ausgewählten Zecken angezeigt und sie automatisch beschriftet.

Wenn wir anzeigen wollen alle anzeigen wollen, sollten wir der Methode eine Liste mit den Indizes der Zeitreihen übergeben matplotlib.pyplot.xticks Methode übergeben:

fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())

# Defining and displaying all time axis ticks
ticks = list(df.index)
plt.xticks(ticks, rotation=45)

Output: 

image2.png

Anpassen der Beschriftung von Zeitachsen-Tickern

Die Beschriftung der Zeitachse auf dem obigen Liniendiagramm kann überwältigend aussehen. Vielleicht wollen wir sie formatieren, um sie besser lesbar zu machen. Zu diesem Zweck können wir die Klasse matplotlib.dates.DateFormatter verwenden und ihr einen String im strftime-Format übergeben, der angibt, wie wir die Datums-/Zeitangaben sehen möchten. Dann übergeben wir diesen Formatierer an die Methode matplotlib.axis.XAxis.set_major_formatter:

fig, ax = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
ticks = list(df.index)
plt.xticks(ticks, rotation=45)

# Formatting time axis tick labels
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))

Output: 

image10.png

Diese Dokumentationsseite enthält eine vollständige Liste aller möglichen strftime-Formatcodes.

Hervorhebung bestimmter Zeiträume

Manchmal möchten wir bestimmte Zeiträume in einem Zeitreihendiagramm schattieren. Zu diesem Zweck können wir die Methode matplotlib.pyplot.axvspan verwenden. Sie benötigt zwei Argumente: den Anfangs- und den Endzeitpunkt des gewünschten Zeitraums im Datumsformat. Die Methode kann auch einige optionale Parameter annehmen, um das Aussehen eines hervorgehobenen Bereichs anzupassen, z. B. seine Farbe, Randfarbe, Transparenz, Linienbreite oder Füllmuster.

Wenden wir diese Technik auf die Grafik aus dem vorherigen Abschnitt an:

fig, ax = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
ticks = list(df.index)
plt.xticks(ticks, rotation=45)
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))

# Highlighting the time period from 15.12.2022 to 1.01.2023 and customizing the shaded area
plt.axvspan(datetime(2022, 12, 15), datetime(2023, 1, 1), facecolor='yellow', alpha=0.5, hatch='/', edgecolor='red', linewidth=5)

Output: 

image11.png

Speichern einer Matplotlib-Zeitreihengrafik in einer Datei

Wir können uns dafür entscheiden, eine Zeitreihengrafik in einer Bilddatei zu speichern, anstatt sie nur anzuzeigen. Dazu verwenden wir die Methode matplotlib.pyplot.savefig und geben den Dateinamen an. Kehren wir zum Beispiel zu unserem ersten Grundplot zurück:

plt.plot(df.index, df['CAD'])

# Saving the resulting plot to a file
plt.savefig('time series line plot.png')

image1.png

Oben haben wir den Plot in einer Datei namens Zeitreihen-Liniendiagramm.png gespeichert, die sich am selben Ort wie unser aktuelles Programm befindet.

Fazit

Zusammenfassend haben wir in diesem Tutorial besprochen, wie man in Matplotlib Linienplots für Zeitreihen erstellt und anpasst. Dabei haben wir sowohl gängige Matplotlib-Methoden als auch fortgeschrittenere Methoden verwendet, die nur für Zeitreihenvisualisierungen geeignet sind.

Nachdem du diese grundlegenden Techniken gelernt hast, möchtest du vielleicht tiefer in die Arbeit mit Zeitreihendaten und deren Visualisierung in Python eintauchen. In diesem Fall solltest du dir die folgenden umfassenden, anfängerfreundlichen und durchgängigen Ressourcen ansehen:

Themen

Python-Kurse

Zertifizierung verfügbar

Kurs

Einführung in die Datenvisualisierung mit Matplotlib

4 hr
188.3K
Lerne, wie du mit Matplotlib Datenvisualisierungen erstellst, anpasst und teilst.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow