Wie integriere ich Subcharts in eine Matplotlib-Achse?
Wenn ich mir die Ausgabe von Backtrader ansehe , kann ich sehen, dass es in matplotlib eine Funktion zu geben scheint, mit der mehrere Unterdiagramme in ein einziges Diagramm integriert werden können:
Der Screenshot zeigt eine Figur - scheinbar ohne matplotlib Nebenhandlungen - die drei Sub - Charts hat ( broker, trades, price data).
Ich weiß, wie man mit matplotlib Nebenhandlungen erstellt - aber das ist nicht das, wonach ich suche.
Ich würde gerne wissen, wie man in einer Achse (ist dies der richtige Matplotlib-Begriff?) Mehrere Unterdiagramme erstellen kann, die dieselbe x-Achse haben.
Antworten
Sie können das tun, was das Bild zeigt, indem Sie die height_ratiosUntergrundstücke definieren.
mehrere Unterdiagramme, die dieselbe x-Achse haben.
Sie können auf matplotlib.pyplot.subplots über sharexund verweisensharey
Wenn Unterzeichnungen eine gemeinsame x-Achse entlang einer Spalte haben, werden nur die x-Häkchen-Beschriftungen der unteren Unterzeichnung erstellt.
Wenn Unterzeichnungen eine gemeinsame y-Achse entlang einer Zeile haben, werden in ähnlicher Weise nur die y-Häkchenbeschriftungen der Unterzeichnung der ersten Spalte erstellt.
import matplotlib.pyplot as plt
fig, axs = plt.subplots(3, 1, sharex='col',
gridspec_kw={'width_ratios': [1], 'height_ratios': [2, 2, 10],
'hspace': 0, 'wspace': 0})
# avoid overlay
axs[1].set_yticks([0, 0.5, 1])
axs[1].set_yticklabels(["", "0.5", ""])
plt.show()
Wenn Sie daran interessiert sind, wie Sie y-Labels mit Anmerkungen versehen können, können Sie sich diese Antwort ansehen .
Es gibt eine ausgezeichnete Bibliothek zur Visualisierung von Beständen usw. Ursprünglich in matplotlib enthalten, aber jetzt eine unabhängige Bibliothek, werde ich eine vereinfachte Antwort auf das Beispiel auf Github geben. Die Formel finden Sie hier .
import pandas as pd
import mplfinance as mpf
idf = pd.read_csv('data/SPY_20110701_20120630_Bollinger.csv', index_col=0, parse_dates=True)
df = idf.loc['2011-07-01':'2011-12-30',:]
mpf.plot(df, volume=True, tight_layout=True, figscale=0.75, style='checkers')