Come integrare i grafici secondari in un asse matplotlib?
Guardando l'output di backtrader , posso vedere che sembra esserci una funzionalità in matplotlib per integrare diversi sottografici in un unico grafico:

La mostra screenshot una figura - a quanto pare senza alcun sottotrame matplotlib - che ha tre sottoschemi ( broker
, trades
, price data
).
So come creare sottotrame con matplotlib, ma non è quello che sto cercando.
Vorrei sapere come si possono creare in un asse (è questo il termine matplotlib giusto?) Diversi sottografici che condividono lo stesso asse x.
Risposte
Puoi fare quello che mostra l'immagine definendo le height_ratios
sottotrame tra.
diversi grafici secondari che condividono lo stesso asse x.
Puoi fare riferimento a matplotlib.pyplot.subplots su sharex
esharey
Quando le sottotrame hanno un asse x condiviso lungo una colonna, vengono create solo le etichette di graduazione x della sottotrama inferiore.
Allo stesso modo, quando le sottotrame hanno un asse y condiviso lungo una riga, vengono create solo le etichette di graduazione y della prima traccia secondaria della colonna.
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()

Se sei interessato a come annotare le etichette y, puoi guardare la mia risposta .
C'è un'eccellente libreria per la visualizzazione di titoli, ecc. Originariamente inclusa in matplotlib, ma ora una libreria indipendente, darò una risposta semplificata all'esempio su Github. La formula può essere trovata qui .
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')
