我有以下输入文件和用于在图形上添加回归线的代码/脚本,但代码给出了这个错误:ValueError: x and y must have same first dimension
。我无法找出那个错误。
如何在图形上添加回归线和回归线方程?
输入文件:
-5.06 -4.27
-6.69 -7.28
-3.80 -3.51
-3.88 -2.79
-0.90 -0.81
2.10 2.59
-1.08 0.28
-5.00 -3.39
2.67 2.92
2.48 2.85
-5.10 -3.49
2.88 3.09
2.30 2.67
-3.47 -2.20
-0.90 -0.79
脚本:
#!/usr/bin/python
import numpy as np
import pylab as plot
import matplotlib.pyplot as plt
import numpy, scipy, pylab, random
from matplotlib.ticker import MultipleLocator
import matplotlib as mpl
from matplotlib.ticker import MaxNLocator
from scipy import stats
with open("input.txt", "r") as f:
x=[]
y=[]
for line in f:
if not line.strip() or line.startswith('@') or line.startswith('#'): continue
row = line.split()
x.append(float(row[0]))
y.append(float(row[1]))
fig = plt.figure(figsize=(2.2,2.2), dpi=300)
ax = plt.subplot(111)
plt.xlim(4, -8)
plt.ylim(4, -8)
ax.xaxis.set_major_locator(MaxNLocator(6))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.xaxis.set_minor_locator(MultipleLocator(1))
ax.yaxis.set_minor_locator(MultipleLocator(1))
#regression part
slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
line = slope*x+intercept
plt.plot(x, line, 'r', label='fitted line')
#end
plt.scatter(x,y,color=['black','black','black','black','black','black','black','black','black','black','black','black','black','black','black'], s=3.5)
plt.savefig("output.png", dpi=300)
最佳答案
您不能将列表与 float 相乘。所以你可以从输入列表 x
,
line = slope*np.array(x)+intercept
更理想的情况是,您可以使用 np.genfromtxt
读取数据,
x,y = np.genfromtxt("input.txt", unpack=True)
完整示例:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
from matplotlib.ticker import MaxNLocator
from scipy import stats
x,y = np.genfromtxt("input.txt", unpack=True)
fig = plt.figure(figsize=(2.2,2.2), dpi=300)
ax = plt.subplot(111)
plt.xlim(4, -8)
plt.ylim(4, -8)
ax.xaxis.set_major_locator(MaxNLocator(6))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.xaxis.set_minor_locator(MultipleLocator(1))
ax.yaxis.set_minor_locator(MultipleLocator(1))
#regression part
slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
line = slope*x+intercept
plt.plot(x, line, 'r', label='y={:.2f}x+{:.2f}'.format(slope,intercept))
#end
plt.scatter(x,y, color="k", s=3.5)
plt.legend(fontsize=9)
plt.show()
关于python - 如何在图形上添加回归线和回归线方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48370562/