python - 如何在图形上添加回归线和回归线方程

标签 python matplotlib

我有以下输入文件和用于在图形上添加回归线的代码/脚本,但代码给出了这个错误: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,

创建一个 numpy 数组
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()

enter image description here

关于python - 如何在图形上添加回归线和回归线方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48370562/

相关文章:

python - 我在使用 pygtk 时遇到问题

python - 使用 Keras Python 测试神经网络

python - 更快地更新Python中的绘图,而不是使用plot.pause()

python - 不均匀(曲线)网格的 Matplotlib 流图

python - Google App Engine 上的多人游戏

python - 从包含 100,000 个整数的列表中检索两个最高的项目

python - 在 Python IDE 中导入模块时遇到问题

python - 如何在 matplotlib 中使用日期时间索引增加 xticks?

python - 使用列号重新排列列 - Pythonic 方式

python - NetworkX 节点标签相对位置