Comment intégrer des sous-graphiques dans un axe matplotlib?
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:
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
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 .
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')