使用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, 5, 10, 15, 20]
y = [0, 0.07, 0.14, 0.2, 0.27]
poly = np.polyfit(x, y, 1)
f = np.poly1d(poly)
plt.plot(f)
plt.show()
上面代码中的变量f
是0.0134 x + 0.002
。当作图时,这个多项式应该是向右倾斜的。但是当我绘制它的时候,它显示了这一点:
代码会出什么问题?
发布于 2021-02-10 06:48:05
您看到的是线性函数f
的系数图,而不是它的值。这与打印两个点相同:
plt.plot([0.0134, 0.002])
发生这种情况是因为在plt.plot
内部将f
转换为list
print(list(f))
[0.0134, 0.002]
这些点以坐标(0,0.0134)和(1,0.002)显示,因为0和1是plt.plot
中的默认x值。
您想要的是在点x
处评估f
并绘制其值:
plt.plot(x, [f(xi) for xi in x])
[f(xi) for xi in x]
可以缩写为f(x)
,因为f可以接受列表参数,这样代码就变成了:
plt.plot(x, f(x))
正如在其他答案中已经提到的那样。
因为f是一个线性函数,所以只要两个点就足够了。X是第一个点,x-1是最后一个点:
plt.plot([x[0], x[-1]], [f(x[0]), f(x[-1])])
发布于 2021-02-10 06:34:50
您需要将x
值传递到多项式中,以获得相应的y
值:
plt.plot(x, f(x)) # this should solve your issue
发布于 2021-02-10 06:45:05
如果输出f
,则返回poly1d([0.0134, 0.002 ])
。因此,如果你尝试绘制它,它将在0.0134和0.002之间画一条线,间隔为0,1。
您真正想要做的是在x
上评估f
plt.plot(x, f(x))
https://stackoverflow.com/questions/66131795
复制相似问题