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 drawnReferenzlinien 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 itdef 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")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(), dannax.plot(x, y); benennen Sie das Diagramm mitset_title,set_xlabelundset_ylabel.- Geben Sie jeder Linie ein
label=und rufen Sieax.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()undget_label()lesen das Diagramm zurück; nutzen Sie in Programmensavefigundplt.closestattshow.
Als Nächstes: Candlestick-Charts, die Eröffnung, Hoch, Tief und Schluss jedes Tages zeichnen.
Lab: Was bewertet wird
- Mit
plot_pricesdie Preislinie zeichnen25 Pkt. - Mit
plot_comparisonzwei Reihen in einem Diagramm vergleichen25 Pkt. - Mit
plot_with_averageeinen gestrichelten gleitenden Durchschnitt ergänzen25 Pkt. - Mit
plot_with_levelein Preisniveau markieren25 Pkt.