代码之家  ›  专栏  ›  技术社区  ›  Ahamed Moosa

如何在pyplot折线图中添加参考线?

  •  2
  • Ahamed Moosa  · 技术社区  · 6 年前

    我有一个数据框,我为它绘制了一个折线图,并使用下面的代码添加了一个参考号

    plt.figure(figsize=(15,5))
    plt.title('Parento Analysis',fontsize=20, color = 'blue')
    plt.xlabel('Product', fontsize=14)
    plt.ylabel('Sales Quantity', fontsize=14)
    plt.plot(parento['Cum_Product%'], parento['Cum_Sales%'],linewidth=3.0)
    plt.plot([10, 10], [0, 80], 'k-', lw=1,dashes=[2, 2])
    plt.plot([0, 10], [80, 80], 'k-', lw=1,dashes=[2, 2])
    plt.show()
    

    enter image description here

    我的解决方案似乎有点长。 有没有其他的短方法可以让我画出(10,80)的参考线?

    2 回复  |  直到 6 年前
        1
  •  3
  •   ImportanceOfBeingErnest    6 年前

    当然,

    plt.plot([10, 10], [0, 80], 'k-', lw=1,dashes=[2, 2])
    plt.plot([0, 10], [80, 80], 'k-', lw=1,dashes=[2, 2])
    

    给予相同的

    plt.plot([10, 10, 0], [0, 80, 80], 'k-', lw=1,dashes=[2, 2])
    

    只绘制一条直线也更有效——尽管在只有两个点的情况下,这并不重要。

    如果你需要更频繁地画这种参考线,你当然可以把它放在函数中,

    import numpy as np
    def refline(x, **kwargs):
        y = np.interp(x, parento['Cum_Product%'], parento['Cum_Sales%'])
        plt.plot([x, x, 0], [0, y, y], **kwargs)
    

    叫它像

    refline(10, color="k", lw=1, dashes=[2, 2])
    
        2
  •  1
  •   Dan fatihk    6 年前

    从评论中回答您的问题:

    是否可以在一个轴上仅参考一个点并在两个轴上绘制参考线

    你需要一个函数形式的亲子关系,也就是说。 销售数量=F(产品) . 解决这个问题的方法之一 f 使用插值:

    from scipy import interpolate
    f = interpolate.interp1d(parento['Cum_Product%'],  parento['Cum_Sales%']) 
    

    所以现在 f(10) 应该回来 80 . 我们可以将其合并到importanceofbeingernests函数中:

    def refline(x, f, **kwargs):
        y = f(x)
        plt.plot([x, x, 0], [0, y, y], **kwargs)
    

    例子:

    import matplotlib.pyplot as plt
    import numpy as np
    from scipy import interpolate
    
    X = np.array([1,2,4,6,12,20,28,40])
    Y = np.log(X)
    
    f = interpolate.interp1d(X,Y)
    # You don't even have to pass f in depending on how general you need it to be
    def refline(x, **kwargs):
            y = f(x)
            plt.plot([x, x, 0], [0, y, y], **kwargs)
    
    plt.plot(X,Y,linewidth=3.0)
    refline(10, color="k", lw=1, dashes=[2, 2])
    plt.show()
    

    enter image description here

    尽管 10 不是我的原稿 X ,因为我们正在进行插值,所以您仍然可以将参考线绘制到直线上的正确点。