Comment intégrer des sous-graphiques dans un axe matplotlib?

Aug 20 2020

En regardant la sortie de backtrader , je peux voir qu'il semble y avoir une fonctionnalité dans matplotlib pour intégrer plusieurs sous-graphiques dans un seul graphique:

(voir également https://www.backtrader.com/docu/plotting/plotting/ )

La capture d' écran montre un chiffre - apparemment sans matplotlib intrigues secondaires - qui a trois sous - diagrammes ( broker, trades, price data).

Je sais comment créer des sous-graphiques avec matplotlib - mais ce n'est pas ce que je recherche.

Je voudrais savoir comment on peut créer dans un axe (est-ce le bon terme matplotlib?) Plusieurs sous-graphiques qui partagent le même axe x.

Réponses

2 Ynjxsjmh Aug 21 2020 at 06:46

Vous pouvez faire ce que l'image montre en définissant les height_ratiossous- graphiques parmi.

plusieurs sous-graphiques partageant le même axe x.

Vous pouvez vous référer à matplotlib.pyplot.subplots à propos sharexetsharey

Lorsque les sous-graphiques ont un axe x partagé le long d'une colonne, seules les étiquettes de graduation x du sous-graphique inférieur sont créées.

De même, lorsque les sous-tracés ont un axe y partagé le long d'une ligne, seules les étiquettes de graduation y du sous-tracé de la première colonne sont créées.

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

Si vous êtes intéressé par la façon d'annoter les étiquettes, vous pouvez consulter ma réponse .

1 r-beginners Aug 21 2020 at 08:08

Il existe une excellente bibliothèque pour la visualisation des stocks, etc. Initialement incluse dans matplotlib, mais maintenant une bibliothèque indépendante, je vais donner une réponse simplifiée à l' exemple sur Github. La formule peut être trouvée ici .

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