1

据我所知,mplfinance 库仅支持 2 个图,称为面板 0 和 1。我想要 3 个面板,所以事实上,我使用外轴来自己创建轴,如下所示:

f = mpf.figure()
(ax1, ax2, ax3) = f.subplots(3, 1, gridspec_kw={'height_ratios': [1, 3, 1]}, sharex=True)
f.subplots_adjust(hspace=0, wspace=0)

# mpf.plot requires to create an index column for dates
ohlcv = ohlcv.set_index(column_names[0])

mpf.plot(ohlcv, type='candle', ax=ax2, volume=ax3)

无法将 ax1 作为参数添加到mpf.plot函数中(或者是吗?),所以我尝试了这个:

ax1.plot(ohlcv.index.values, self._ohlcv['cash'])

我认为它会起作用,因为它使用与mpf.plot.

结果:

X 轴未在轴 1、2 和 3 之间对齐

所以我不知道我应该如何绘制ax1ax2and对齐ax3

如果我不使用sharex=True情节看起来像这样: 在此处输入图像描述

它看起来不错,但我猜它使用了不同的日期格式,并且与 ax2 和 ax3 不完全一致。那么我怎样才能使这项工作呢?

示例代码:

import pandas as pd
import mplfinance as mpf

ohlcv = pd.DataFrame(
    {'Date': [1609459200, 1609545600, 1609632000, 1609718400, 1609804800, 1609891200, 1609977600, 1610064000],
     'Open': [11.25, 12.61, 11.93, 10.52, 10.41, 11.66, 11.47, 12.14],
     'High': [12.63, 13.2, 11.94, 12.12, 15.02, 11.71, 12.47, 13.01],
     'Low': [11.10, 11.68, 9.93, 10.3, 10.31, 11.26, 10.46, 12.13],
     'Close': [12.61, 11.93, 10.52, 10.41, 11.66, 11.47, 12.14, 12.96],
     'Volume': [108, 102, 105, 116, 164, 145, 132, 117],
     'cash': [100.0, 100.295, 100.295, 100.295, 95.685, 95.635, 95.635, 95.635]
     })

ohlcv.iloc[:, 0] = pd.to_datetime(ohlcv.iloc[:, 0], unit='s')
ohlcv = ohlcv.set_index('Date')

f = mpf.figure()
(ax1, ax2, ax3) = f.subplots(3, 1, gridspec_kw={'height_ratios': [1, 3, 1]})   # add sharex=True as a param
f.subplots_adjust(hspace=0, wspace=0)

mpf.plot(ohlcv, type='candle', ax=ax2, volume=ax3)

ax1.plot(ohlcv.index.values, ohlcv['cash'])
ax1.legend(['Cash'], loc='best')

mpf.show()

编辑:

现在我仔细观察,成交量条也过大,并且在蜡烛下方视觉上没有正确对齐。轴之间的网格线也很混乱。

4

1 回答 1

1

当使用子图的面板方法时,mplfinance 实际上最多支持 32 个面板。(尽管文档说它仅限于 10 个面板,但您可以在此处看到版本 v0.12.7a17的最大面板数量从 10 个增加到 32 个。 pip install --upgrade mplfinance以获得最新版本)。

请阅读上述有关面板方法的文档之后,如果您仍有疑问,请随时在此处发布或打开另一个 SO 问题。


顺便说一句,您在上面似乎使用的外部轴方法对于您要完成的任务来说并不是必需的。通常,不鼓励使用外轴(除非绝对需要),因为它会阻止一些 mplfinance 功能(如果需要,您需要自己编写这些功能)。相反,如果您需要 访问 mplfinance Figure 和 Axes对象,我鼓励您使用 可以提供该访问权限同时保留完整 mplfinance 功能的returnfig=True 方法。

我希望这个答案有帮助。全面披露:我是 mplfinance 库的维护者。


例如,使用上面的代码/数据:

import pandas as pd
import mplfinance as mpf
ohlcv = pd.DataFrame(
    {'Date': [1609459200, 1609545600, 1609632000, 1609718400,
              1609804800, 1609891200, 1609977600, 1610064000],
     'Open': [11.25, 12.61, 11.93, 10.52, 10.41, 11.66, 11.47, 12.14],
     'High': [12.63, 13.2, 11.94, 12.12, 15.02, 11.71, 12.47, 13.01],
     'Low': [11.10, 11.68, 9.93, 10.3, 10.31, 11.26, 10.46, 12.13],
     'Close': [12.61, 11.93, 10.52, 10.41, 11.66, 11.47, 12.14, 12.96],
     'Volume': [108, 102, 105, 116, 164, 145, 132, 117],
     'cash': [100.0, 100.295, 100.295, 100.295, 95.685, 95.635, 95.635, 95.635]
     })

ohlcv.iloc[:, 0] = pd.to_datetime(ohlcv.iloc[:, 0], unit='s')
ohlcv = ohlcv.set_index('Date')

ap = mpf.make_addplot(ohlcv['cash'],panel=0,ylabel='Cash')
mpf.plot(ohlcv,
         type='candle',
         volume=True,
         main_panel=1,
         volume_panel=2,
         addplot=ap,
         figsize=(7,7))

结果是:

在此处输入图像描述

如文档中所述,还可以调整绘图的许多功能(蜡烛和音量条的宽度和颜色、面板尺寸等)。

于 2021-07-23T13:59:14.273 回答