我有一个数据框,我已经使用下面的代码
绘制了折线图并添加了参考编号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)绘制参考线?
答案 0 :(得分:3)
当然,
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])
只绘制一条线也更有效 - 尽管在只有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])
答案 1 :(得分:1)
从评论中回答你的问题:
是否可以在一个轴上仅引用一个点并在两个轴上绘制参考线
您需要功能形式的Parento行,即销售数量= 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
中,因为我们进行插值,您仍然可以在线上的正确点绘制参考线。