【问题标题】:When using external axes method to plot multiple candlestick charts using mplfinance library, how to plot volume inside the candlestick chart?使用 mplfinance 库使用外轴法绘制多个烛台图时,如何在烛台图内绘制成交量?
【发布时间】:2021-02-11 01:58:03
【问题描述】:

我正在做的项目需要使用 mplfinance 库在多个图中绘制 300 多个烛台图的代码。我知道这只能使用外轴方法来完成,因为它提供了更多的灵活性,并且理论上可以绘制无限的图表。

我目前使用的代码如下,绘制的图表如下:

import mplfinance as mpf

s = mpf.make_mpf_style(base_mpf_style='yahoo', rc={'font.size': 6})
fig = mpf.figure(figsize=(34, 13.2), style=s, tight_layout=True)

ax_p = fig.add_subplot(n_rows, n_cols, pos_price)
ax_v = fig.add_subplot(n_rows, n_cols, pos_vol, sharex=ax_p)

fig, ax_list = mpf.plot(resampled_df, type='candle', ax=ax_p, volume=ax_v, show_nontrading=False,
                     datetime_format='%a %d-%m-%y', xrotation=0, returnfig=True)

我的代码绘制的数百个图表中的 6 个示例图表的屏幕截图:

以上代码绘制的两个图表截图如下:

如您所见,成交量图绘制在烛台图下方的单个图表中。我很难找到将交易量移动到烛台图表中的解决方案,在 mplfinance 文档issue 114 中有一个类似的帖子解释了如何做到这一点......但我发现对于新的 ppl 来说很难理解像我一样去图书馆。

如果你能发布详细的代码来做这件事,我们将不胜感激!

2021 年 2 月 12 日更新:

我根据@Daniel 的建议修改了代码,使用add_axes() 而不是add_subplot(),现在在绘制多个图表时,交易量位于烛台图表的底部。美丽的!已接受答案。

ax_intra_day_candle = fig.add_axes([x_pos, y_pos, ax_width, ax_height])
ax_intra_day_candle.set_title(title)
ax_intra_day_volume = fig.add_axes([x_pos, y_pos - ax_vol_height, ax_width, ax_vol_height], sharex=ax_intra_day_candle)
mpf.plot(intra_day_df, type='candle', ax=ax_intra_day_candle, volume=ax_intra_day_volume, show_nontrading=False,
                 datetime_format='%a %m-%d', xrotation=0)

【问题讨论】:

  • 顺便说一句,当您使用“外轴模式”时,returnfig=True 将被忽略(因为 mplfinance 没有图形对象来返回它,并且在无论如何调用者都有 Figure 和 Axes 对象)。
  • 谢谢丹尼尔。是的,这是有道理的。我修改了代码,它作为问题中的更新工作得很好。关于 mplfinance,还有很多东西要学习。感谢您对图书馆的贡献!
  • 罗西,谢谢你告诉我。我很高兴它对你有用。如果您有机会,请在某处发布您的结果。我真的很喜欢看到人们用 mplfinance 做的有创意的事情。一切顺利。

标签: python plot candlestick-chart multiple-axes mplfinance


【解决方案1】:

我假设您的要求是让交易量和烛台共享相同的 x 轴 similar to this image here

最简单的方法是使用fig.add_axes()(而不是fig.add_subplot()

通过这种方式,您可以精确控制图中每个轴的放置位置。你可以看到这正在完成in the mplfinance code here

基本思想是,您可以根据总图的一部分来指定每个 Axes 对象的位置,表示左下角 strong> 轴,及其宽度和高度

当您希望两个 Axes 对象接触且它们之间没有空间时,您可以相应地指定位置和宽度/高度,以使下部 Axes 的顶部和上部 Axes 的底部完全相遇。

因此,例如,要将两个大小相等的 Axes 完全堆叠在一起,假设在图的左上象限,您将拥有:

# ax = fig.add_axes([left,bottom,width,height])

ax1 = fig.add_axes([0.05,0.75,0.5,0.25])
ax2 = fig.add_axes([0.05,0.50,0.5,0.25])
  • 左侧的 0.05 空间为 y 轴标签留出了空间。
  • ax1 从底部向上四分之三 (0.75) 处开始,向右延伸一半 (0.5),高度为 0.25(将其带到图的最顶部)。
  • ax2 从底部向上一半 (0.50) 开始,向右延伸一半 (0.5),高度为 0.25正好到达 ax1 的最底部强>

HTH


这是一个更具体的例子,以及结果。 注意蜡烛图和成交量图一起只占据了图的左上象限

fig = mpf.figure(figsize=(8,8),style='yahoo')

ax1 = fig.add_axes([0.05,0.75,0.5,0.25])
ax2 = fig.add_axes([0.05,0.50,0.5,0.25])

mpf.plot(df,type='candle',ax=ax1,volume=ax2)
mpf.show()

【讨论】:

  • 非常感谢丹尼尔!这清楚地解释了一切,正是我正在寻找的!我将在代码中尝试 add_axes() 函数,并将在此处发布更新的图表。干杯!
【解决方案2】:

不需要这么长的代码使用下面的代码 假设您有使用 mplfinance 在图表中绘制的数量和数据

mpf.plot(data,type='candle',style='yahoo',volume=True)

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多