σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademySkills
Ctrl K
AO
+1,2 Tsd. Lernende
AnmeldenBeitreten ↗
Skills
AO
+1,2 Tsd. Lernende
Anmelden
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Python-Skill›Modul 2 · NumPy & pandas für Marktdaten›Thema 2.18·~35 Min.Mittelstufe

Liniendiagramme mit matplotlib

Position in der SkillModul 2 von 11 · Thema 18 von 20
2.18 Liniendiagramme mit matplotlib
—Lab-Punkte— / 100XP gesamt—Serie—

Eine Figure, eine Axes, eine Linie

Ein Diagramm ist der schnellste Weg zu sehen, ob eine Preisreihe sauber, trendend oder kaputt ist. In matplotlib ist eine Figure die gesamte Zeichenfläche und eine Axes ein Diagramm darauf, mit Linien, Beschriftungen und Legende. Der objektorientierte Weg ist fig, ax = plt.subplots() mit anschließenden Aufrufen auf ax: ax.plot(x, y) zeichnet eine Linie, ax.set_title, ax.set_xlabel und ax.set_ylabel benennen das Diagramm. Auf einer expliziten Axes zu zeichnen und sie zurückzugeben, macht eine Zeichenfunktion leicht wiederverwendbar und testbar.

import matplotlib
matplotlib.use("Agg")            # draw without a window (no screen needed)
import matplotlib.pyplot as plt
import pandas as pd

prices = pd.Series([100.0, 102, 101, 105, 107, 106, 110], index=pd.bdate_range("2026-03-02", periods=7))

fig, ax = plt.subplots()
ax.plot(prices.index, prices.values, label="AAPL")
ax.set_title("Closing price")
ax.set_xlabel("Date")
ax.set_ylabel("Price (USD)")

print(ax.get_title(), "|", ax.get_xlabel(), "|", ax.get_ylabel())   # Closing price | Date | Price (USD)
print(len(ax.lines), ax.lines[0].get_ydata().tolist())               # 1 [100.0, 102.0, 101.0, 105.0, 107.0, 106.0, 110.0]

Beschriftungen und Legende

Bei mehreren Linien in einem Diagramm braucht jede einen Namen. Übergeben Sie label="..." an ax.plot und rufen Sie am Ende einmal ax.legend() auf: Die Legende listet die Beschriftungen in der Reihenfolge, in der die Linien gezeichnet wurden. Ein Diagramm ohne Beschriftungen, Titel und Einheiten ist ein Bild, kein Ergebnis. Linien haben auch einen Stil: linestyle="--" ergibt eine gestrichelte Linie, praktisch für einen Durchschnitt, der die Preise nicht verdecken soll, und color, linewidth und marker verfeinern ihn weiter.

ma = prices.rolling(3).mean()
ax.plot(ma.index, ma.values, label="MA3", linestyle="--")
ax.legend()

print([line.get_label() for line in ax.lines])                  # ['AAPL', 'MA3']
print([text.get_text() for text in ax.get_legend().get_texts()])   # ['AAPL', 'MA3']
print(ax.lines[1].get_linestyle(), ax.lines[1].get_ydata().tolist()[:3])   # -- [nan, nan, 101.0]   NaN points are simply not drawn

Referenzlinien und Diagramme, die man nicht sieht

Eine horizontale Linie markiert ein Niveau wie einen Strike, einen Stop oder den Durchschnitt: ax.axhline(105, linestyle="--") zeichnet sie über das ganze Diagramm (axvline tut dasselbe senkrecht). Matplotlib kann auch ganz ohne Fenster zeichnen: Mit dem Backend Agg schreibt fig.savefig("chart.png") das Diagramm in eine Datei, so erzeugen Berichte und Server Diagramme. Da alles Gezeichnete am Axes-Objekt bleibt, kann ein Programm (oder ein Test) es zurücklesen: Linien mit ax.lines, ihre Daten mit get_ydata(), Beschriftungen mit get_label(), den Titel mit get_title().

ax.axhline(105, linestyle=":", label="level")

level_line = ax.lines[-1]
print(list(level_line.get_ydata()), level_line.get_linestyle(), level_line.get_label())   # [105, 105] : level

fig.savefig("prices.png")   # writes the chart to a file; no window, no plt.show() needed
plt.close(fig)              # release the figure when you are done with it
def plot_prices(prices):
    fig, ax = plt.subplots()
    ax.plot(prices.index, prices.values)
    ax.set_title("Closing price")
    return ax                                   # the caller can add lines, save the chart or inspect it

ax = plot_prices(prices)
print(len(ax.lines), ax.get_title())            # 1 Closing price
plt.close("all")
Schließen Sie die Figures, die Sie erzeugenJedes plt.subplots() hält seine Figure im Speicher, bis Sie plt.close(fig) aufrufen. In einer Schleife, die Hunderte Diagramme zeichnet, oder in einem Server führt das Vergessen zu einem Speicherleck und schließlich zu einer Warnung. Erzeugen Sie die Figure in der Funktion, geben Sie zurück, was der Aufrufer braucht, und lassen Sie ihn sie schließen.
  • fig, ax = plt.subplots(), dann ax.plot(x, y); benennen Sie das Diagramm mit set_title, set_xlabel und set_ylabel.
  • Geben Sie jeder Linie ein label= und rufen Sie ax.legend() auf; linestyle="--" zeichnet gestrichelt; ax.axhline(y) eine waagerechte Linie.
  • Zeichnen Sie auf einer Axes und geben Sie sie zurück: ax.lines, get_ydata() und get_label() lesen das Diagramm zurück; nutzen Sie in Programmen savefig und plt.close statt show.

Als Nächstes: Candlestick-Charts, die Eröffnung, Hoch, Tief und Schluss jedes Tages zeichnen.

Lab: Was bewertet wird

  • Mit plot_prices die Preislinie zeichnen25 Pkt.
  • Mit plot_comparison zwei Reihen in einem Diagramm vergleichen25 Pkt.
  • Mit plot_with_average einen gestrichelten gleitenden Durchschnitt ergänzen25 Pkt.
  • Mit plot_with_level ein Preisniveau markieren25 Pkt.
Explorer · lab-51-1
▾ lab-51-1
…
bash · im Browser
learner@quantcraft:~/lab-51-1$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

Alles in lab-51-1 wird auf die Startdateien zurückgesetzt und das Terminal geleert. Ihre aktuelle Lösung geht verloren – das lässt sich nicht rückgängig machen.

Wird zurückgesetzt
  • main.py → Startcode
  • Terminal-Verlauf und Testausgabe
  • Nicht eingereichte Änderungen
Bleibt erhalten
  • Beste Lab-Punktzahl
  • Ihre XP und Ihre Serie
  • Vorlesungsfortschritt und Notizen

Melde dich an, um deinen Code auszuführen.

Alle Lektionen kannst du kostenlos lesen. Erstelle ein Konto oder melde dich an, um Code auszuführen, Tests zu starten und dieses Lab abzugeben.

  • IDE im Browser mit Bash-Terminal — nichts zu installieren
  • Sofortige Bewertung, XP und dein Platz auf der Skill
Konto erstellenAnmelden
ODER
Weiter mit GitHub