Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在散点图上用直线绘制上下边界?_Python_Matplotlib_Math_Plot_Linear Regression - Fatal编程技术网

Python 如何在散点图上用直线绘制上下边界?

Python 如何在散点图上用直线绘制上下边界?,python,matplotlib,math,plot,linear-regression,Python,Matplotlib,Math,Plot,Linear Regression,我有一个数据框df,其中列a和Q。我用这个代码在上面画了一条方程 #Actual line of equation, which has to be plotted: Q=alpha*A^beta : ln(Q)=a+b*ln(A) : y = a+b(x) x = np.log(df['A']) y = np.log(df['Q']) #deriving b,a b,a = np.polyfit(np.log(x), y, 1) #deriving alpha and beta. By

我有一个数据框
df
,其中列
a
Q
。我用这个代码在上面画了一条方程

#Actual line of equation, which has to be plotted: Q=alpha*A^beta : ln(Q)=a+b*ln(A) : y = a+b(x)

x = np.log(df['A'])
y = np.log(df['Q'])

#deriving b,a
b,a = np.polyfit(np.log(x), y, 1)

#deriving alpha and beta. By using a = ln(alpha); b = beta -1
alpha = np.exp(a)
beta = b + 1

Q = df['Q'].values
A = df['A'].values

#equation of line
q = alpha * np.power(A,beta)

#plotting the points and line
plt.scatter(A,Q)
plt.plot(A,q, '-r')
plt.yscale('log')
plt.xscale('log')
这将产生以下输出,类似于回归线

但我感兴趣的是绘制方程的同一条线,即连接两侧最远点(垂直于绿线)的上下曲线/边界,如下图所示,具有与连续绿线相同的坡度


首先搜索线与图之间差异最小(参见最大值)点的索引。有了这一点,
alpha_min
可以计算如下

Q[pos\u min]==alpha\u min*np.power(A[pos\u min],beta)
,因此

alpha\u min=Q[pos\u min]/np.power(A[pos\u min],beta)

由于这些线可以延伸到远离原始点的地方,因此有助于恢复x和y限制(从而将绘图剪裁到原始区域)

导入matplotlib.pyplot作为plt
将numpy作为np导入
作为pd进口熊猫
df=pd.DataFrame()
df['A']=10**np.随机均匀(0,1,1000)**2
df['Q']=10**np.随机均匀(0,1,1000)**2
x=np.log(df['A'])
y=np.log(df['Q'])
#导出b,a
b、 a=np.polyfit(np.log(x),y,1)
#推导α和β。使用a=ln(α);b=β-1
alpha=np.exp(a)
β=b+1
Q=df['Q'].值
A=df['A'].值
#绘制点和线
plt.yscale('log')
plt.xscale('log')
plt.散射(A,Q,color='b')
#直线方程
xmin,xmax=plt.xlim()#用于绘制直线的x轴限制
x=np.linspace(xmin,xmax,50)
q=α*np.功率(x,β)
plt.绘图(x,q,'-r')
ymin,ymax=plt.ylim()#存储散点图和线图的限制,以便以后恢复
pos_min=np.argmin(Q/np.power(A,beta))
pos_max=np.argmax(Q/np.power(A,beta))
阿尔法最小值=Q[位置最小值]/np.功率(A[位置最小值],β)
alpha_max=Q[pos_max]/np.功率(A[pos_max],β)
#plt.散射(A[pos_min],Q[pos_min],s=100,fc='none',ec='r',lw=3)
#plt.散射(A[pos_max],Q[pos_max],s=100,fc='none',ec='g',lw=3)
plt.图(x,(alpha_max)*np.幂(x,beta),'--r')
plt.绘图(x,(α最小值)*np.幂(x,β),'--r')
plt.xlim(xmin,xmax)#恢复散点图的极限
plt.ylim(ymin,ymax)
plt.show()

这可能会对您有所帮助。使用
pos_min=np.argmin(Q/np.power(A,beta))
的更新是否适用于您的数据?