当使用外部轴方法使用mplfinance库绘制多个烛台图时,如何绘制烛台图内的体积?

2023-09-22 18:09:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做的项目需要使用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个示例图表的屏幕截图:

enter image description here

上述代码绘制的两个图表的屏幕截图如下:enter image description here

正如您所见,体积图绘制在烛台图下方的单个图表中。我很难找到解决方案,将卷移到烛台图中,mplfinance文档中有类似的帖子issue 114解释了如何做到这一点。。。。。。但我发现,像我这样的图书馆的新ppl很难理解

如果您能发布详细的代码来实现这一点,我们将不胜感激

更新日期:2021年2月12日:

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

enter image description here

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)

Tags: 代码posaddstyle图表fig绘制ax
1条回答
网友
1楼 · 发布于 2023-09-22 18:09:50

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

最简单的方法是使用^{}(而不是^{

通过这种方式,您可以精确地控制每个轴在图形中的位置。您可以看到正在执行此操作in the mplfinance code here

基本思想是根据总图形的部分指定每个轴对象的位置,指示轴的左下角及其宽度和高度

如果希望两个轴对象接触,且它们之间没有空间,则可以相应地指定位置和宽度/高度,以便下轴的顶部和上轴的底部完全相交

因此,例如,要将两个大小相等的轴精确地堆叠在彼此的顶部,让我们假设在图形的左上象限中,您将有:

# 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的最底部


下面是一个更具体的例子,以及结果注意蜡烛和体积是如何一起绘制的,它们只占据了图的左上象限

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

enter image description here

相关问题 更多 >