首页 > 解决方案 > matplotlib 财务自定义 y/x 轴

问题描述

最终目标:

我正在构建一个图表,我想在其中有一个无花果:

  • 烛台在顶部,带有自定义 y 轴(例如,底部值设置为低于最小值),带有完整网格
  • 中间面板中的指标图,带有自定义 x/y 轴(y 上的某些值),带有最后一个值的 bbox
  • 底部面板中的一些字符串和 int 表格数据

仅使用 mpf 时的一般问题:

  • mpf 绘制的数据在 x 轴上默认采用一些“随机”日期值,我希望它们在每个季度的第一天设置
  • mpf 绘制的指标默认采用适用于数据集中值范围的 y 轴值,我希望它们在指标范围内统一(如果 RSI 硬编码为 0-100)
  • mpf 似乎共享 x 轴,这意味着我不能放置带有非图形数据的附加面板(例如带有某些指标值的表)

所以我将 mpf 与标准 mpl 混合并尝试了这个:

fig = mpf.figure(style = 'yahoo', figsize = (9,8))
ax1 = plt.subplot2grid( shape = (9,8), loc = (0,0), rowspan = 5, colspan = 8)
ax2 = plt.subplot2grid( shape = (9,8), loc = (5,0), rowspan = 2, colspan = 8)

ax2.set_ylim(bottom = 0)
ax2.set_yticks([0,20,30,40,50,60,70,80,100])

ax1.set_xticks(np.arange(start = np.datetime64('1999-01'), stop = '2021-04', step = 3, dtype = 'datetime64[M]'))
ax1.grid(True, axis ='x')


ax2 = plt.plot(market_data.tail(200).index, market_data['smoothedRSI'].tail(200))


mpf.plot(market_data.tail(200), type = 'candle', ax = ax1)

但似乎它在创建新问题时解决了一些问题(指标面板按预期工作)

这段代码的问题:

  • 随机日期变成月初(以 yyyy-mm 格式),但每个月而不是每个月绘制一次
  • 两个图表在左右都有空填充,并且tight_layout = True,仅适用于 mpf 图表
  • mpf 图表上的网格是水平的而不是垂直的(ax1.grid() 只能用 False, 'both' 禁用它)
  • ax1.set_ticks() 显示 ax2 而不是 ax1 的刻度

如何访问这些选项?我可以在基本的 matplotlib 中解决它,但遇到了 mpf 的死胡同。

标签: pythonmatplotlib

解决方案


推荐阅读