【问题标题】:mplfinance plot with external axis mode, additional plot with date format issue带外轴模式的 mplfinance 绘图,带有日期格式问题的附加绘图
【发布时间】:2021-07-23 10:15:23
【问题描述】:

据我所知,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 相同的索引列。

结果:

所以我不知道应该如何绘制ax1 以与ax2ax3 对齐。

如果我不使用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()

编辑:

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

【问题讨论】:

    标签: python plot axis date-formatting mplfinance


    【解决方案1】:

    mplfinance 在使用 the panels method 的子图时实际上最多支持 32 个面板。 (虽然documentation 说它仅限于 10 个面板,但 you can see herev0.12.7a17 版本的最大面板数量从 10 个增加到 32 个。pip install --upgrade mplfinance 获得最新版本)。

    请阅读above mentioned documentation on the panels method之后,如果您仍有疑问,请随时在此处发布或打开另一个 SO 问题。


    顺便说一句,您似乎在上面使用的external axis method 并不是您想要完成的任务所必需的。通常,不鼓励使用外轴(除非绝对需要),因为它会阻止一些 mplfinance 功能(如果需要,您需要自己编写这些功能)。相反,如果您需要 access to the mplfinance Figure and Axes 对象,我鼓励您使用 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))
    

    结果是:

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

    【讨论】:

    • 感谢您的帮助!我对某些事情感到困惑,但是您的回答澄清了很多!我一定会阅读文档以更深入地了解如何正确有效地使用您的库。
    猜你喜欢
    • 2020-05-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2011-08-02
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多