¿Cómo integrar subgráficos en un eje matplotlib?

Aug 20 2020

Al observar la salida de backtrader , puedo ver que parece haber una característica en matplotlib para integrar varios subgráficos en un solo gráfico:

(ver también https://www.backtrader.com/docu/plotting/plotting/ )

La captura de pantalla muestra una figura - aparentemente sin ningún subtramas matplotlib - que tiene tres subgráficos ( broker, trades, price data).

Sé cómo crear subtramas con matplotlib, pero esto no es lo que estoy buscando.

Me gustaría saber cómo se pueden crear en uno de los ejes (¿es este el término de matplotlib correcto?) Varios subgráficos que comparten el mismo eje x.

Respuestas

2 Ynjxsjmh Aug 21 2020 at 06:46

Puede hacer lo que muestra la imagen definiendo height_ratiosentre las subtramas.

varios subgráficos que comparten el mismo eje x.

Puede consultar matplotlib.pyplot.subplots sobre sharexysharey

Cuando las subtramas tienen un eje x compartido a lo largo de una columna, solo se crean las etiquetas de marca x de la subparcela inferior.

De manera similar, cuando las subparcelas tienen un eje y compartido a lo largo de una fila, solo se crean las etiquetas de marca y de la primera subparcela de la columna.

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 está interesado en cómo anotar etiquetas y, puede ver mi respuesta .

1 r-beginners Aug 21 2020 at 08:08

Hay una biblioteca excelente para la visualización de acciones, etc. Originalmente incluida en matplotlib, pero ahora una biblioteca independiente, daré una respuesta simplificada al ejemplo de Github. La fórmula se puede encontrar aquí .

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