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

Python 如何在pyplot折线图中添加参考线?,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个数据框,我为它画了一个折线图,并使用下面的代码添加了一个参考号 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

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

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

我的解决方案对我来说似乎有点长。 有没有其他捷径可以用来画(10,80)的参考线

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

从评论中回答您的问题:

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

您需要功能形式的Parento行,即Sales Quantity=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()


即使
10
不在我的原始
X
中,因为我们正在插值,您仍然可以在直线上的正确点绘制参考线。

Ernest,感谢您的回答,是否可以在一个轴上仅参考一个点,并在两个轴上绘制参考线。就像我们的代码一样。谢谢,您可以编写一个函数来实现这一点。我更新了答案。谢谢:)谢谢你的帮助。真的给我展示了一个不同的方法谢谢Dan很好的解决方案,我感谢你的帮助谢谢你的超级演示:)