【问题标题】:Separate panels in mplfinancemplfinance 中的独立面​​板
【发布时间】:2021-07-30 03:03:29
【问题描述】:

我想分开我的面板,因为标题重叠。 ADX 标题在 RSI 面板中。我试过tight_layout=True,但还是一样。

我的代码:

        ap0 = [
        mpf.make_addplot(df['sma_200'],color='#FF0000', panel=2),
        mpf.make_addplot(df['sma_50'],color='#ffa500', panel=2),
        mpf.make_addplot(df['sma_20'],color='#00FF00', panel=2),
        mpf.make_addplot(df['rsi'],color='#ffa500', panel=0, title="RSI"),
        mpf.make_addplot(df['hline_30'], panel=0),
        mpf.make_addplot(df['hline_70'], panel=0),
        mpf.make_addplot(df['adx'],color='#0000FF', panel=1, secondary_y=False, title="ADX"),
        mpf.make_addplot(df['-di'],color='#FF0000', panel=1, secondary_y=False),
        mpf.make_addplot(df['+di'],color='#32cd32', panel=1, secondary_y=False),
        mpf.make_addplot(df['hline_25'], panel=1, secondary_y=False)
    ]
    fig, axlist = mpf.plot(
        df,
        panel_ratios=(.05, .05, .2, .05),
        type="hollow_candle",
        yscale='log',
        volume=True,
        title="{} - {}".format(ticker, interval),
        style=mpf_style,
        figsize=(12.8, 10),
        returnfig=True,
        closefig=True,
        addplot=ap0,
        main_panel=2,
        volume_panel=3,
        num_panels=4,
    )

【问题讨论】:

  • 除了下面r-beginners answer中的两个建议(顺便说一句非常好),您还可以尝试调整panel ratios以使上面板更大一些,并设置ylimmake_addplot() 调用中,以便数据本身在这些面板中占用更少的空间。这将有效地在这些面板中创建更多空间,为标题留出更多空间。我不是 100% 确定这会奏效(还没有尝试过),但它可能会。
  • 另一个想法,我还没有尝试过,但我认为可能可行:从mpf.make_mpf_style() 创建自定义mpf_style 时包括kwarg rc={"axes.titley":0.8} ...不一定是0.8,而是(我想想)任何低于 1.0 的数字代表面板的最顶部。此参数 ("axes.titley") 将提高或降低传递给make_addplot()title 的位置。通过玩弄它的价值,您也许能够找到一个适合您的情节的位置。

标签: python matplotlib mplfinance


【解决方案1】:

Mplfinance 子图没有调整图形间距的功能,因此有一种方法可以将它们放入 matplotlib 子图中并使其间隔开。我们建议使用 y 轴标签而不是标题,这是仅在 Mplfinance 中提供的功能。

import yfinance as yf
import mplfinance as mpf
import matplotlib.pyplot as plt

df = yf.download("AAPL", start="2021-01-01", end="2021-07-01")
df['sam_20'] = df['Close'].rolling(20).mean()
df['sam_50'] = df['Close'].rolling(50).mean()
fig = mpf.figure(style='yahoo',figsize=(7,8))
ax1 = fig.add_subplot(4,1,1, sharex=ax4)
ax2 = fig.add_subplot(4,1,2, sharex=ax4)
ax3 = fig.add_subplot(4,1,3, sharex=ax4)
ax4 = fig.add_subplot(4,1,4)

ap0 = [
    mpf.make_addplot(df['sam_20'], color='#00FF00', panel=0, title='sma_20', ax=ax1),
    mpf.make_addplot(df['sam_50'], color='#FFa500', panel=1, title='sma_50', ax=ax2)
]

mpf.plot(df,ax=ax3, addplot=ap0, volume=ax4, )
fig.subplots_adjust(hspace=0.2)
ax1.tick_params(labelbottom=False)
ax2.tick_params(labelbottom=False)
ax3.tick_params(labelbottom=False)
ax3.yaxis.set_label_position('left')
ax3.yaxis.tick_left()

另一种解决方案

ap0 = [
    mpf.make_addplot(df['sam_20'], color='#00FF00', panel=0, ylabel='sma_20'),
    mpf.make_addplot(df['sam_50'], color='#FFa500', panel=1, ylabel='sma_50')
]

@Daniel Goldfarlb 解决方案

ap0 = [
    mpf.make_addplot(df['sam_20'], color='#00FF00', panel=0, title='sma_20', ylim=(110,140)),
    mpf.make_addplot(df['sam_50'], color='#FFa500', panel=1, title='sma_50')
]

mpf.plot(
        df,
        panel_ratios=(2, 1, 3, 1),
        type="hollow_candle",
        yscale='log',
        volume=True,
        style='yahoo',
        figsize=(12.8, 10),
        addplot=ap0,
        main_panel=2,
        volume_panel=3,
        num_panels=4,
    )

【讨论】:

  • @Daniel Goldfarb 我实际上已经添加了您的评论方法。我认为这种方法是一种选择。
  • 有什么方法可以为斧头添加海关尺寸吗?因为我需要指标尺寸小于蜡烛。我正在使用 r-beginners 解决方案
  • 如果你想改变它们每个的大小,你可以通过在 GridSpec 中指定height_ratios=[0.25,0.25,0.5,0.25] 来实现。见this
猜你喜欢
  • 1970-01-01
  • 2014-01-09
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2018-03-22
相关资源
最近更新 更多