如何解决Matplotlib 图以错误的方式绘制
使用 numpy 和 matplotlib,我试图绘制一组多拟合数据点:
x = [0,5,10,15,20]
y = [0,0.07,0.14,0.2,0.27]
使用此代码:
import numpy as np
import matplotlib.pyplot as plt
x = [0,0.27]
poly = np.polyfit(x,y,1)
f = np.poly1d(poly)
plt.plot(f)
plt.show()
上面代码中的变量f
是0.0134 x + 0.002
。这个多项式在绘制时应该向右倾斜。但是当我绘制它时,它显示了这一点:
代码可能有什么问题?
解决方法
您看到的是线性函数 f
的系数图,而不是其值。这与绘制两点相同:
plt.plot([0.0134,0.002])
发生这种情况是因为 f
被转换为 plt.plot
内的列表:
print(list(f))
[0.0134,0.002]
点以坐标 (0,0.0134) 和 (1,0.002) 显示,因为 0 和 1 是 plt.plot
中的默认 x 值。
您想要的是在点 f
处评估 x
并绘制其值:
plt.plot(x,[f(xi) for xi in x])
[f(xi) for xi in x]
可以像 f(x)
一样缩写,因为 f 可以带列表参数,所以代码变成:
plt.plot(x,f(x))
正如其他答案中已经提到的。
因为 f 是一个线性函数,所以只需 2 个点就足够了。 x[0] 是第一个点,x[-1] 是最后一个点:
plt.plot([x[0],x[-1]],[f(x[0]),f(x[-1])])
,
您需要将 x
值传递给多项式以获得相应的 y
值:
plt.plot(x,f(x)) # this should solve your issue
,
如果您打印出 f
,则返回 poly1d([0.0134,0.002 ])
。因此,如果您尝试绘制该图,它将在 [0,1] 区间上绘制一条介于 0.0134 和 0.002 之间的线。
您真正想做的是在 f
处评估 x
:
plt.plot(x,f(x))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。