在二维数组中添加带有方程式的趋势线
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
,在您的情况下,需要将 x
和 y
作为一维数组。我将等式 (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
)
为了理解,我生成了两个二维数组。之后,我绘制了该数组的散点图。现在我想绘制一条线性趋势线以及该线的方程式。但我做错了什么。我真的不知道如何获得方程式。我的代码是:
# 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
,在您的情况下,需要将 x
和 y
作为一维数组。我将等式 (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
)