在二维数组中添加带有方程式的趋势线

Add trendline with equation in 2D array

为了理解,我生成了两个二维数组。之后,我绘制了该数组的散点图。现在我想绘制一条线性趋势线以及该线的方程式。但我做错了什么。我真的不知道如何获得方程式。我的代码是:

# Import Libraries
import numpy as np
import matplotlib.pyplot as plt

# Generate Random data 
a = np.zeros(shape=(8,8))
a[0] = [1,2,3,4,5,6,7,8]
a[1] = [1,0,3,4,0,6,6,8]
a[2] = [1,2,3,4,5,3,7,8]# Import Libraries
import numpy as np
import matplotlib.pyplot as plt

# Generate Random data 
a = np.zeros(shape=(8,8))
a[0] = [1,2,3,4,5,6,7,8]
a[1] = [1,0,3,4,0,6,6,8]
a[2] = [1,2,3,4,5,3,7,8]
a[3] = [1,2,3,0,5,6,7,8]
a[4] = [1,2,3,4,5,6,7,5]
a[5] = [1,2,3,4,5,6,7,8]
a[6] = [1,2,0,1,5,0,8,8]
a[7] = [1,2,3,4,5,6,7,8]

b = np.zeros(shape=(8,8))
b[0] = [1,1,3,4,5,6,7,8]
b[1] = [1,0,3,4,5,6,7,8]
b[2] = [1,2,3,4,5,6,5,6]
b[3] = [2,2,3,0,5,6,7,8]
b[4] = [1,2,3,8,8,6,7,8]
b[5] = [1,2,3,4,5,6,7,9]
b[6] = [1,2,6,4,5,0,7,8]
b[7] = [1,2,3,4,5,6,7,9]

# Draw scatterplot
plt.figure();
plt.title('Scatter plot')
plt.xlabel('a')
plt.ylabel('b')
plt.xlim(0, 10)
plt.ylim(0, 10)
plt.scatter(a, b)
plt.show()

# Add trendline with equation
#z = np.polyfit(a, b, 1)
#p = np.poly1d(z)
#plt.plot(a,p(a),"r--")
#print "y=%.6fx+(%.6f)"%(z[0],z[1]) #Dont know how it comes!

感谢您的帮助和建议!

以下代码有效:

plt.figure();
plt.suptitle('Scatter plot')
plt.xlabel('a')
plt.ylabel('b')
plt.scatter(a, b)

z = np.polyfit(a.flatten(), b.flatten(), 1)
p = np.poly1d(z)
plt.plot(a,p(a),"r--")
plt.title("y=%.6fx+%.6f"%(z[0],z[1])) 

plt.show()

np.polyfit,在您的情况下,需要将 xy 作为一维数组。我将等式 (y = coef x + b) 作为绘图的标题,但您可以根据需要更改它。

例如,plt.text(8,1,"y=%.6fx+%.6f"%(z[0],z[1]), ha='right') 而不是 plt.title("y=%.6fx+%.6f"%(z[0],z[1])) 会在绘图的右下角很好地打印方程式(右对齐,坐标 x=8, y=1