HOWTO · Plotly
Plotly Liniendiagramm
Dieser Artikel lehrt Sie, ein Liniendiagramm mit der Funktion line() von Plotly in Python zu erstellen.
Auf dieser Seite
Ein Liniendiagramm verbindet Datenpunkte mit einer durchgehenden Linie und eignet sich damit gut, um zu zeigen, wie sich ein Wert entlang einer geordneten Achse wie der Zeit verändert. In Python ist der schnellste Weg dazu px.line, die Liniendiagramm-Funktion von Plotly Express: Übergeben Sie die x- und y-Achsendaten, und sie gibt ein Figure-Objekt zurück, das fig.show() in Ihrem Browser oder Notebook rendert.
Ein Liniendiagramm mit Plotly Express erstellen
Plotly Express ist die High-Level-Plotting-Schnittstelle von Plotly. px.line nimmt Ihre Daten entgegen, erstellt eine Figure und speichert für jede übergebene Serie eine Trace — also eine Linie.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import pandas as pd
import plotly.express as px
df = pd.DataFrame(
{
"day": ["Mon", "Tue", "Wed", "Thu"],
"team_a": [3, 4, 3, 5],
"team_b": [2, 3, 2, 4],
}
)
fig = px.line(df, x="day", y=["team_a", "team_b"], width=500, height=400)
print(len(fig.data))
2
Die Argumente width und height legen die Diagrammgröße in Pixeln fest, und das Übergeben einer Liste mit zwei Spalten an y zeichnet zwei Linien, sodass die ausgegebene Trace-Anzahl 2 beträgt. Die Spaltennamen werden zu den Legendeneinträgen.
Fügen Sie fig.show() als letzte Zeile hinzu, um das gerenderte Diagramm in Ihrem Browser zu öffnen (in einem Jupyter-Notebook wird es automatisch angezeigt, wenn Sie fig auswerten). Das Ergebnis sieht so aus:
Daten für die x- und y-Achsen auswählen
px.line akzeptiert Daten in zwei Formen. Sie können x und y direkt einfache Python-Sequenzen übergeben oder einen DataFrame als erstes Argument übergeben und x und y die Namen der zu plottenden Spalten geben. x positioniert die Punkte entlang der horizontalen Achse und y entlang der vertikalen Achse, und Plotly verbindet die Punkte in der Reihenfolge, in der die Werte erscheinen.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import pandas as pd
import plotly.express as px
sequence_fig = px.line(x=[1, 2, 3, 4], y=[10, 15, 13, 18])
df = pd.DataFrame(
{"month": ["Jan", "Feb", "Mar", "Apr"], "revenue": [10, 15, 13, 18]}
)
column_fig = px.line(df, x="month", y="revenue")
print(len(sequence_fig.data), len(column_fig.data))
1 1
Beide Formen erzeugen eine Figur mit einer einzigen Linie. Um mehrere Serien zu plotten, übergeben Sie bei Daten im Wide-Format eine Liste von Spaltennamen an y, wie im ersten Beispiel, oder halten die Daten im Long-Format — eine Zeile pro Beobachtung mit einer Spalte, die die Serie benennt — und übergeben diese Spalte an color. Verwenden Sie das Argument labels, ein Dictionary, das Spaltennamen auf Anzeigetext abbildet, wenn Sie Achsentitel oder Legendennamen wünschen, die von den Spaltennamen abweichen.
Linien, Farben und Marker anpassen
Bei Daten im Long-Format zeichnet color eine Linie pro Gruppe und fügt eine Legende hinzu, line_dash variiert das Strichmuster jeder Linie und symbol variiert das Markersymbol an jedem Datenpunkt (Marker erscheinen automatisch, sobald symbol gesetzt ist; markers=True erzwingt sie andernfalls). Das Argument text legt eine Textbeschriftung pro Punkt fest, die Sie mit fig.update_traces(mode="lines+markers+text") anzeigen können, und title gibt dem Diagramm eine Überschrift.
Plotly wählt Farben und Strichstile aus Standardsequenzen. Überschreiben Sie diese mit color_discrete_sequence — einer benannten Palette wie px.colors.qualitative.Light24 oder Dark24 oder einer eigenen Liste — und line_dash_sequence, das die gültigen Strichstile solid, dot, dash, longdash, dashdot und longdashdot durchläuft.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import plotly.express as px
df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.line(
df,
x="year",
y="lifeExp",
color="country",
line_dash="country",
color_discrete_sequence=px.colors.qualitative.Light24,
line_dash_sequence=["longdashdot", "dash"],
width=600,
height=400,
)
print(len(fig.data), fig.data[0].line.dash)
2 longdashdot
px.data.gapminder() lädt einen mit Plotly gebündelten Datensatz, und der query-Aufruf behält die beiden ozeanischen Länder, sodass das Diagramm zwei Linien enthält. Die erste Serie übernimmt den ersten Eintrag von line_dash_sequence.
Für die exakte Kontrolle über einzelne Linien verwenden Sie color_discrete_map, ein Dictionary von Gruppennamen zu CSS-Farben. Gruppen, die nicht in der Map enthalten sind, behalten Farben aus der aktiven Sequenz.
import plotly.express as px
df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.line(
df,
x="year",
y="lifeExp",
color="country",
color_discrete_map={"Australia": "black", "New Zealand": "yellow"},
width=600,
height=400,
)
print(fig.data[0].name, fig.data[0].line.color)
Australia black
Ein Diagramm in Facetten aufteilen und Achsenskalen ändern
facet_col und facet_row teilen das Diagramm in ein Raster von Subplots auf, eines pro Wert der gewählten Spalte, sodass jede Serie nebeneinander verglichen werden kann. facet_col_spacing und facet_row_spacing nehmen einen Float zwischen 0 und 1 entgegen, der den Abstand zwischen den Subplots als Anteil der Plotfläche festlegt.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import plotly.express as px
df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.line(
df,
x="year",
y="lifeExp",
color="country",
line_dash="country",
symbol="country",
facet_col="country",
title="Line Chart",
width=600,
height=400,
)
print(len(fig.data))
2
Wenn die Werte mehrere Größenordnungen umfassen, schalten Sie eine Achse mit log_x=True oder log_y=True auf eine logarithmische Skala um; Plotly beschriftet die Ticks dann in Zehnerpotenzen.
import plotly.express as px
df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.line(df, x="year", y="lifeExp", color="country", log_y=True)
print(fig.layout.yaxis.type)
log
Traces aktualisieren und Fehlerbalken hinzufügen
Um Fehlerbalken zu zeichnen, geben Sie error_y (oder error_x für horizontale Unsicherheit) eine Spalte oder Sequenz, die die Größe der Unsicherheit jedes Punktes enthält:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import pandas as pd
import plotly.express as px
df = pd.DataFrame(
{
"month": ["Jan", "Feb", "Mar", "Apr", "May", "Jun"],
"revenue": [102, 118, 110, 131, 125, 140],
"uncertainty": [6, 8, 5, 9, 7, 10],
}
)
fig = px.line(df, x="month", y="revenue", error_y="uncertainty", markers=True)
print(len(fig.data[0].error_y.array))
6
Nachdem eine Figur existiert, wendet fig.update_traces Trace-Attribute auf alle Linien gleichzeitig an. Zum Beispiel entfernt showlegend=False alle Linien aus der Legende, und opacity zwischen 0 und 1 macht die Linien durchscheinend — nützlich, wenn sich mehrere Serien überlappen.
import plotly.express as px
df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.line(df, x="year", y="lifeExp", color="country", width=600, height=400)
fig.update_traces(showlegend=False, opacity=0.7)
print(fig.data[0].showlegend, fig.data[0].opacity)
False 0.7
px.line erstellt Scatter-Traces, daher funktioniert jede Option in der Plotly-Scatter-Referenz auch mit fig.update_traces.