Bagaimana cara mengintegrasikan subchart dalam satu sumbu matplotlib?

Aug 20 2020

Melihat output dari backtrader , saya dapat melihat bahwa tampaknya ada fitur di matplotlib untuk mengintegrasikan beberapa subchart dalam satu plot:

(Lihat juga https://www.backtrader.com/docu/plotting/plotting/ )

Screenshot menunjukkan salah satu tokoh - tampaknya tanpa subplot matplotlib - yang memiliki tiga subcharts ( broker, trades, price data).

Saya tahu cara membuat subplot dengan matplotlib - tetapi ini bukan yang saya cari.

Saya ingin tahu bagaimana seseorang dapat membuat dalam satu sumbu (apakah ini istilah matplotlib yang tepat?) Beberapa subchart yang berbagi sumbu x yang sama.

Jawaban

2 Ynjxsjmh Aug 21 2020 at 06:46

Anda dapat melakukan apa yang ditunjukkan gambar dengan menentukan di height_ratiosantara subplot.

beberapa subchart yang memiliki sumbu x yang sama.

Anda dapat merujuk ke matplotlib.pyplot.subplots tentang sharexdansharey

Jika subplot memiliki sumbu x bersama di sepanjang kolom, hanya label centang x dari subplot bawah yang dibuat.

Demikian pula, ketika subplot memiliki sumbu y bersama di sepanjang baris, hanya label centang y dari subplot kolom pertama yang dibuat.

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

Jika Anda tertarik dengan cara memberi anotasi pada label y, Anda dapat melihat jawaban saya ini .

1 r-beginners Aug 21 2020 at 08:08

Ada perpustakaan yang sangat baik untuk visualisasi saham, dll. Awalnya disertakan dalam matplotlib, tetapi sekarang menjadi perpustakaan independen, saya akan memberikan jawaban yang disederhanakan untuk contoh di Github. Rumusnya dapat ditemukan di sini .

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