【问题标题】:How to integrate subcharts in one matplotlib axes?如何在一个 matplotlib 轴中集成子图?
【发布时间】:2020-08-21 04:49:26
【问题描述】:

查看backtrader 的输出,我可以看到matplotlib 中似乎有一个功能可以将多个子图集成到一个图中:

(另见https://www.backtrader.com/docu/plotting/plotting/

屏幕截图显示了一个图形 - 显然没有任何 matplotlib 子图 - 它具有三个子图表(brokertradesprice data)。

我知道如何使用 matplotlib 创建子图 - 但这不是我想要的。

我想知道如何在一个轴上创建几个共享相同 x 轴的子图(这是正确的 matplotlib 术语吗?)。

【问题讨论】:

    标签: python matplotlib mplfinance


    【解决方案1】:

    您可以通过在子图中定义height_ratios 来完成图片所示的操作。

    共享同一 x 轴的多个子图表。

    sharexsharey可以参考matplotlib.pyplot.subplots

    当子图沿列有一个共享的 x 轴时,只有 x 刻度 创建底部子图的标签。

    类似地,当子图在一行上有一个共享的 y 轴时,只会创建第一列子图的 y 刻度标签。

    import matplotlib.pyplot as plt
    
    
    fig, axs = plt.subplots(3, 1, sharex='col',
                            gridspec_kw={'width_ratios': [1], 'height_ratios': [2, 2, 10],
                            'hspace': 0, 'wspace': 0})
    
    # avoid overlay
    axs[1].set_yticks([0, 0.5, 1])
    axs[1].set_yticklabels(["", "0.5", ""])
    
       
    plt.show()
    

    如果你对如何注释y标签感兴趣,可以看看我的this answer

    【讨论】:

      【解决方案2】:

      有一个优秀的股票等可视化库。最初包含在matplotlib中,但现在是一个独立的库,我将在Github上的example给出一个简化的答案。公式可以在here找到。

      import pandas as pd
      import mplfinance as mpf
      
      idf = pd.read_csv('data/SPY_20110701_20120630_Bollinger.csv', index_col=0, parse_dates=True)
      df = idf.loc['2011-07-01':'2011-12-30',:]
      
      mpf.plot(df, volume=True, tight_layout=True, figscale=0.75, style='checkers')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-17
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-30
        • 1970-01-01
        相关资源
        最近更新 更多