Como integrar subcharts em um eixo matplotlib?

Aug 20 2020

Olhando para a saída do backtrader , posso ver que parece haver um recurso no matplotlib para integrar vários subgráficos em um único gráfico:

(Veja também https://www.backtrader.com/docu/plotting/plotting/ )

A mostra imagem de tela uma figura - aparentemente sem qualquer subtramas matplotlib - que tem três sub-gráficos ( broker, trades, price data).

Eu sei como criar subtramas com matplotlib - mas não é isso que estou procurando.

Gostaria de saber como se pode criar em um eixo (este é o termo matplotlib certo?) Vários subgráficos que compartilham o mesmo eixo x.

Respostas

2 Ynjxsjmh Aug 21 2020 at 06:46

Você pode fazer o que a imagem mostra definindo as height_ratiossubtramas.

vários subcharts que compartilham o mesmo eixo x.

Você pode consultar matplotlib.pyplot.subplots sobre sharexesharey

Quando as subparcelas têm um eixo x compartilhado ao longo de uma coluna, apenas os rótulos de escala x da subparcela inferior são criados.

Da mesma forma, quando os subplots têm um eixo y compartilhado ao longo de uma linha, apenas os rótulos de escala y do primeiro subplot da coluna são criados.

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 você estiver interessado em como fazer anotações nos rótulos, pode ler esta resposta .

1 r-beginners Aug 21 2020 at 08:08

Existe uma excelente biblioteca para visualização de ações, etc. Originalmente incluída no matplotlib, mas agora uma biblioteca independente, darei uma resposta simplificada ao exemplo no Github. A fórmula pode ser encontrada aqui .

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