Come integrare i grafici secondari in un asse matplotlib?

Aug 20 2020

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

(Guarda anche https://www.backtrader.com/docu/plotting/plotting/ )

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

2 Ynjxsjmh Aug 21 2020 at 06:46

Puoi fare quello che mostra l'immagine definendo le height_ratiossottotrame tra.

diversi grafici secondari che condividono lo stesso asse x.

Puoi fare riferimento a matplotlib.pyplot.subplots su sharexesharey

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 .

1 r-beginners Aug 21 2020 at 08:08

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')