Python Seaborn Line Plot Tutorial: Datenvisualisierungen erstellen
Ein Liniendiagramm ist eine relationale Datendarstellung, die zeigt, wie sich eine kontinuierliche Variable verändert, wenn eine andere sich verändert. Sie ist eine der gebräuchlichsten Grafiken, die in den Bereichen Finanzen, Vertrieb, Marketing, Gesundheitswesen, Naturwissenschaften und mehr verwendet wird.
In diesem Tutorial zeigen wir dir, wie du mit Seaborn, einer beliebten Python-Bibliothek zur Datenvisualisierung, Liniendiagramme in Python erstellst und anpasst.
Einführung in den Datensatz
Um etwas zum Üben zu haben, laden wir zunächst den Kaggle-Datensatz " Tägliche Wechselkurse pro Euro 1999-2023" herunter. Dann importieren wir alle notwendigen Pakete und lesen den Datenrahmen ein und bereinigen ihn. Ohne auf die Details des Reinigungsprozesses einzugehen, zeigt der folgende Code, welche Schritte auszuführen sind:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('euro-daily-hist_1999_2022.csv')
df = df.iloc[:, [0, 1, 4, -2]]
df.columns = ['Date', 'Australian dollar', 'Canadian dollar', 'US dollar']
df = pd.melt(df, id_vars='Date', value_vars=['Australian dollar', 'Canadian dollar', 'US dollar'], value_name='Euro rate', var_name='Currency')
df['Date'] = pd.to_datetime(df['Date'])
df = df[df['Date']>='2022-12-01'].reset_index(drop=True)
df['Euro rate'] = pd.to_numeric(df['Euro rate'])
print(f'Currencies: {df.Currency.unique()}\n')
print(df.head())
print(f'\n{df.Date.dt.date.min()}/{ df.Date.dt.date.max()}')
Ausgabe:
Currencies: ['Australian dollar' 'Canadian dollar' 'US dollar']
Date Currency Euro rate
0 2023-01-27 Australian dollar 1.5289
1 2023-01-26 Australian dollar 1.5308
2 2023-01-25 Australian dollar 1.5360
3 2023-01-24 Australian dollar 1.5470
4 2023-01-23 Australian dollar 1.5529
2022-12-01/2023-01-27
Der resultierende Datenrahmen enthält tägliche (Werktage) Euro-Kurse für australische, kanadische und US-Dollars für den Zeitraum vom 01.12.2022 bis einschließlich 27.01.2023.
Jetzt können wir uns an die Erstellung und Anpassung von Python-Linienplots wagen.
Grundlagen des Seaborn Line Plots
Um ein Liniendiagramm in Seaborn zu erstellen, können wir eine der beiden Funktionen verwenden: lineplot()
oder relplot()
. Insgesamt haben sie viele gemeinsame Funktionen und identische Parameternamen. Der Hauptunterschied besteht darin, dass wir mit relplot() Linienplots mit mehreren Linien auf verschiedenen Facetten erstellen können. Stattdessen ermöglicht lineplot() die Arbeit mit Konfidenzintervallen und die Aggregation von Daten.
In diesem Lehrgang werden wir hauptsächlich die Funktion lineplot() verwenden.
Im Kurs Einführung in die Datenvisualisierung mit Seaborn lernst und übst du die wichtigsten Funktionen und Methoden der Seaborn-Bibliothek. Du kannst dir auch unser Seaborn-Tutorial für Anfänger ansehen, um dich mit der beliebten Python-Bibliothek vertraut zu machen.
Erstellen eines einzelnen Meeresspiegels
Wir können ein Liniendiagramm erstellen, das die Beziehungen zwischen zwei kontinuierlichen Variablen wie folgt darstellt:
usd = df[df['Currency']=='US dollar'].reset_index(drop=True)
sns.lineplot(x='Date', y='Euro rate', data=usd)
Ausgabe:
Die obige Grafik zeigt die Dynamik des EUR-USD-Kurses. Wir haben die Variablen definiert, die auf der x- und y-Achse dargestellt werden sollen (die x- und y-Parameter ), und den Datenrahmen (Daten), aus dem wir diese Variablen nehmen.
Zum Vergleich: Um denselben Plot mit relplot() zu erstellen, würden wir Folgendes schreiben:
sns.relplot(x='Date', y='Euro rate', data=usd, kind='line')
Ausgabe:
In diesem Fall haben wir ein weiteres Argument für die Funktion relplot() angegeben: kind='line'. Diese Funktion erstellt standardmäßig ein Streudiagramm.
Anpassen eines einzelnen Meeresspiegels
Wir können die obige Tabelle auf viele Arten anpassen, um sie lesbarer und informativer zu machen. Wir können zum Beispiel die Größe der Zahlen anpassen, Titel und Achsenbeschriftungen hinzufügen, die Schriftgröße anpassen, die Linie anpassen, Markierungen hinzufügen und anpassen usw. Sehen wir uns an, wie wir diese Verbesserungen in Seaborn umsetzen können.
Anpassen der Figurengröße
Da Seaborn auf matplotlib aufbaut, können wir matplotlib.pyplot verwenden, um die Größe der Figuren anzupassen:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd)
Ausgabe:
Stattdessen können wir mit relplot() die Parameter height und aspect (das Verhältnis von Breite zu Höhe) für denselben Zweck verwenden:
sns.relplot(x='Date', y='Euro rate', data=usd, kind='line', height=6, aspect=4)
Ausgabe:
Hinzufügen eines Titels und von Achsenbeschriftungen
Um einen Diagrammtitel und Achsenbeschriftungen hinzuzufügen, können wir die Funktion set() für das seaborn line plot-Objekt verwenden und die Argumente title, xlabel und ylabel übergeben:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
Ausgabe:
Einstellen der Schriftgröße
Eine bequeme Möglichkeit, die Schriftgröße anzupassen, ist, die Funktion set_theme() zu verwenden und mit verschiedenen Werten des Parameters font_scale zu experimentieren:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Beachte, dass wir auch style='white' hinzugefügt haben, um zu vermeiden, dass der ursprüngliche Stil überschrieben wird.
Ändern der Linienfarbe, des Stils und der Größe
Um die Diagrammlinie anzupassen, können wir einige optionale Parameter wie bei matplotlib.pyplot.plot angeben, z. B. Farbe, Linienstil oder Linienstärke:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd, linestyle='dotted', color='magenta', linewidth=5).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Hinzufügen von Markern und Anpassen ihrer Farbe, ihres Stils und ihrer Größe
Es ist möglich, Markierungen auf der Linie hinzuzufügen und ihr Aussehen anzupassen. In diesem Fall können wir auch einige Parameter aus der Matplotlib verwenden, wie z.B. marker, markerfacecolor oder markersize:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd, marker='*', markerfacecolor='limegreen', markersize=20).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Die Dokumentation liefert uns die ultimative Liste der Parameter, die wir für die Verbesserung der Ästhetik einer Meeresspiegeldarstellung verwenden können. Insbesondere können wir alle möglichen Markierungen sehen , die zur Auswahl stehen.
In unserem Seaborn-Spickzettel findest du weitere Möglichkeiten, wie du ein Liniendiagramm in Seaborn anpassen kannst.
Seaborn Line Plots mit mehreren Lines
Oft müssen wir untersuchen, wie sich mehrere kontinuierliche Variablen in Abhängigkeit von einer anderen kontinuierlichen Variable verändern. Zu diesem Zweck können wir ein Seaborn Line Plot mit mehreren Linien erstellen. Die Funktionen lineplot() und relplot() sind auch in solchen Fällen anwendbar.
Erstellen eines Meeresspiegels mit mehreren Linien
Technisch gesehen ist es möglich, ein Liniendiagramm mit mehreren Linien zu erstellen, indem du für jede abhängige Variable, d.h. für jede Linie, ein eigenes Achsenobjekt erstellst:
aud = df[df['Currency']=='Australian dollar'].reset_index(drop=True)
cad = df[df['Currency']=='Canadian dollar'].reset_index(drop=True)
sns.lineplot(x='Date', y='Euro rate', data=usd)
sns.lineplot(x='Date', y='Euro rate', data=aud)
sns.lineplot(x='Date', y='Euro rate', data=cad)
Ausgabe:
Oben haben wir zwei weitere Teilmengen aus unserem ursprünglichen Datenrahmen df extrahiert - für den australischen und den kanadischen Dollar - und jeden Eurokurs gegen die Zeit aufgetragen. Es gibt jedoch effizientere Lösungen: die Verwendung der Parameter Farbton, Stil oder Größe, die sowohl in lineplot() als auch in relplot() verfügbar sind.
Verwendung des Parameters Farbton
Dieser Parameter funktioniert folgendermaßen: Wir weisen ihm den Namen einer Dataframe-Spalte zu, die kategoriale Werte enthält, und dann erzeugt seaborn ein Liniendiagramm für jede Kategorie und gibt jeder Linie eine andere Farbe:
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency')
Ausgabe:
Mit nur einer Zeile einfachen Codes haben wir ein Meerhorn-Liniendiagramm für drei Kategorien erstellt. Beachte, dass wir den ursprünglichen Datenrahmen df anstelle seiner Untergruppen für verschiedene Währungen übergeben haben.
Verwendung des Stilparameters
Der Parameter style funktioniert genauso wie hue, nur dass er zwischen den Kategorien durch unterschiedliche Linienstile (durchgezogen, gestrichelt, gepunktet usw.) unterscheidet, ohne die Farbe zu beeinflussen:
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency')
Ausgabe:
Verwendung des Größenparameters
Genau wie bei Farbton und Stil wird auch beim Parameter Größe für jede Kategorie eine eigene Zeile erstellt. Sie hat keinen Einfluss auf die Farbe und den Stil der Linien, macht aber jede von ihnen unterschiedlich breit:
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency')
Ausgabe:
Anpassen eines Meeresspiegels mit mehreren Linien
Lass uns nun mit der Ästhetik unseres Diagramms experimentieren. Einige Techniken sind identisch mit denen, die wir bei einem einzelnen Seaborn-Linienplot angewendet haben. Die anderen sind nur für Linienplots mit mehreren Linien spezifisch.
Allgemeine Anpassungen
Wir können die Größe der Abbildung anpassen, einen Titel und Achsenbeschriftungen hinzufügen und die Schriftgröße des obigen Diagramms auf dieselbe Weise ändern, wie wir es bei einem einzelnen Liniendiagramm getan haben:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Ändern von Farbe, Stil und Größe der einzelnen Zeilen
Vorhin haben wir gesehen, dass seaborn bei Verwendung der Parameter Farbton, Stil oder Größe einen Standardsatz von Farben, Stilen und Größen für ein Liniendiagramm mit mehreren Linien bereitstellt. Bei Bedarf können wir diese Standardeinstellungen überschreiben und Farben, Stile und Größen selbst auswählen.
Wenn wir den Parameter hue verwenden, können wir das Argument palette auch als Liste oder Tupel von matplotlib-Farbnamen übergeben:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen']).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Es ist auch möglich, eine bestehende Matplotlib-Palette direkt anzuwenden:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette='spring').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Gleichzeitig können wir bei der Verwendung von hue auch den Linienstil und die Breite aller Linien mit den Argumenten linestyle und linewidth anpassen:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen'], linestyle='dashed', linewidth=5).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Stattdessen können wir, wenn wir mit dem style-Parameter ein Liniendiagramm mit mehreren Linien erstellen, eine Liste (oder ein Tupel) von Listen (oder Tupeln) einem Parameter namens dashes zuweisen:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]]).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
In der obigen Liste der Listen, die den Strichen zugeordnet sind, steht der erste Punkt jeder Unterliste für die Länge eines Segments der entsprechenden Linie, während der zweite Punkt die Länge einer Lücke angibt.
Hinweis: Um eine durchgezogene Linie darzustellen, müssen wir die Länge einer Lücke auf Null setzen, z. B.: [1, 0].
Um die Farbe und die Breite aller Linien dieses Diagramms anzupassen, gibst du die Argumente color und linewidth an, genau wie bei der Anpassung eines einzelnen Meeresspiegels:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]], color='darkviolet', linewidth=4).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Wenn wir schließlich den Parameter size verwenden, um ein Seaborn Multiple Line Plot zu erstellen, können wir die Breite jeder Linie über den Parameter sizes regulieren. Sie nimmt eine Liste (oder ein Tupel) von ganzen Zahlen auf:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency', sizes=[2, 10, 5]).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Um die Farbe und den Stil aller Linien dieses Plots anzupassen, müssen wir die Argumente linestyle und color angeben:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency', sizes=[2, 10, 5], linestyle='dotted', color='teal').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Hinzufügen von Markern und Anpassen ihrer Farbe, ihres Stils und ihrer Größe
Wir möchten vielleicht Markierungen auf unserem Seaborn Multiple Line Plot hinzufügen.
Um Markierungen mit derselben Farbe, demselben Stil und derselben Größe auf allen Linien hinzuzufügen, müssen wir die Parameter von matplotlib verwenden, wie z. B. marker, markerfacecolor, markerize usw., genau wie bei einem einzelnen Liniendiagramm:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', marker='o', markerfacecolor='orangered', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Anders sieht es jedoch aus, wenn wir für jede Zeile unterschiedliche Markierungen haben wollen. In diesem Fall müssen wir den Marker-Parameter verwenden, der jedoch laut den seaborn-Funktionen nur funktioniert, wenn der Style-Parameter angegeben ist:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', markers=['o', 'X', '*'], markerfacecolor='brown', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Im obigen Diagramm können wir alle Linien einfarbig machen, indem wir das Argument Striche angeben und das Stilmuster [1, 0] für jede Linie festlegen:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', markers=['o', 'X', '*'], dashes=[[1, 0], [1, 0], [1, 0]], markerfacecolor='brown', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Ausgabe:
Fazit
In diesem Tutorial haben wir eine Reihe von Möglichkeiten kennengelernt, wie du ein Seaborn-Liniendiagramm mit einer oder mehreren Linien erstellen und anpassen kannst.
Mit Seaborn können wir noch viel mehr tun, um einen Linienplot weiter anzupassen. Wir können zum Beispiel:
- Zeilen nach mehr als einer kategorialen Variable gruppieren
- Anpassen der Legende
- Erstellen von Liniendiagrammen mit mehreren Linien auf verschiedenen Facetten
- Anzeigen und Anpassen des Konfidenzintervalls
- Anpassen der Zeitachsen-Ticks und ihrer Beschriftungen für ein Zeitreihen-Liniendiagramm
Wenn du tiefer in die Möglichkeiten von Seaborn einsteigen möchtest, solltest du unseren Kurs Intermediate Data Visualization with Seaborn besuchen.
FAQs zum Seaborn Line Plot
Was ist eine Linienhandlung in Seaborn?
Ein Liniendiagramm ist eine Art von Diagramm in Seaborn, das die Beziehung zwischen zwei Variablen darstellt, indem es die Datenpunkte mit einer geraden Linie verbindet.
Welche Art von Daten eignet sich am besten für ein Liniendiagramm in Seaborn?
Liniendiagramme eignen sich am besten für Daten, bei denen es eine klare Beziehung zwischen zwei Variablen gibt und die Variablen kontinuierlich oder ordinal sind.
Kann ich in Seaborn mehrere Linien auf demselben Grundstück zeichnen?
Ja, du kannst in Seaborn mehrere Linien in einem Diagramm darstellen, indem du mit dem Parameter hue
eine kategoriale Variable angibst, nach der die Daten gruppiert werden sollen.
Was ist der Unterschied zwischen einem Liniendiagramm und einem Streudiagramm in Seaborn?
Ein Liniendiagramm in Seaborn zeigt die Beziehung zwischen zwei Variablen mit einer geraden Linie, während ein Streudiagramm die Beziehung mit einzelnen Datenpunkten darstellt.
Kann ich eine Regressionslinie zu meinem Liniendiagramm in Seaborn hinzufügen?
Ja, du kannst eine Regressionslinie zu deinem Liniendiagramm in Seaborn hinzufügen, indem du die Funktion regplot()
verwendest, die ein lineares Regressionsmodell zwischen zwei Variablen anpasst und aufzeichnet.
Wie speichere ich meinen Seaborn-Linienplot in einer Datei?
Du kannst deine Seaborn-Liniendarstellung in einer Datei speichern, indem du die Funktion savefig()
aus der Bibliothek matplotlib
verwendest, die die aktuelle Abbildung in einem bestimmten Dateipfad und -format speichert.