1

查看backtrader的输出,我可以看到 matplotlib 中似乎有一个功能可以将多个子图集成到一个图中:

另见 https://www.backtrader.com/docu/plotting/plotting/ 分别 https://www.backtrader.com/docu/plotting/01-sample-code.png (另见https://www.backtrader.com/docu/plotting/plotting/

屏幕截图显示了一个图形 - 显然没有任何 matplotlib 子图 - 它具有三个子图 ( broker, trades, price data)。

我知道如何使用 matplotlib 创建子图——但这不是我想要的。

我想知道如何在一个轴上创建几个共享相同 x 轴的子图(这是正确的 matplotlib 术语吗?)。

4

2 回答 2

2

您可以通过定义height_ratios其中的子图来完成图片显示的操作。

几个共享相同 x 轴的子图。

您可以参考matplotlib.pyplot.subplots关于sharexsharey

当子图沿列具有共享 x 轴时,仅创建底部子图的 x 刻度标签。

类似地,当子图在一行上有一个共享的 y 轴时,只会创建第一列子图的 y 刻度标签。

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

在此处输入图像描述

如果您对如何注释 y 标签感兴趣,可以查看我的这个答案

于 2020-08-21T06:46:10.743 回答
1

有一个优秀的股票等可视化库。最初包含在matplotlib中,但现在是一个独立的库,我将在Github上对示例进行简化回答。公式可以在这里找到。

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

在此处输入图像描述

于 2020-08-21T08:08:34.953 回答