Matplotlib通过多个点绘制样条线

6
我有一个数组点。
nodes = [(1, 2), (6, 15), (10, 6), (10, 3), (3, 7)]

现在,我需要绘制通过这些点的样条曲线。您可以查看图像结果 enter image description here

但是我不知道如何使用matplotlib.pyplot绘制。请帮忙。

1个回答

12

所以,正确的代码应该是:

from __future__ import division
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate


nodes = np.array( [ [1, 2], [6, 15], [10, 6], [10, 3], [3, 7] ] )

x = nodes[:,0]
y = nodes[:,1]

tck,u     = interpolate.splprep( [x,y] ,s = 0 )
xnew,ynew = interpolate.splev( np.linspace( 0, 1, 100 ), tck,der = 0)

plt.plot( x,y,'o' , xnew ,ynew )
plt.legend( [ 'data' , 'spline'] )
plt.axis( [ x.min() - 1 , x.max() + 1 , y.min() - 1 , y.max() + 2 ] )
plt.show()

image


抱歉,但这不是我想要的。根据您的代码,使用matplotlib时我得到了这个图像:http://i.imgur.com/Cz7MnMU.png。但是按照点的坐标顺序,它应该是这样的:http://i.stack.imgur.com/Rj6Eh.png。 - Duc Tran
我认为你提出的最佳方案是“polilyne”,而不是“Spline”,就像这里所示:http://i.stack.imgur.com/Rj6Eh.png - Duc Tran
@Duc Tran:splprep用于查找B样条,如此处所述http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.interpolate.splprep.html。请检查我的更新! - George
1
嗨,你在最后一段代码的splprep()调用中漏掉了s=0,这就是为什么样条曲线错过了右下角的点并且与OP所需的输出不完全匹配的原因。我认为现在答案可能需要进行一些编辑 - 你可以将代码从“best you came up”移动到上一个图像之上进行编辑,然后删除“UPDATE”之前的所有内容,因为它实际上并没有回答原始问题。 - J Richard Snape
1
你应该删除from __future__ import division这一行或将其移到顶部,否则会出现错误。 - hitzg
@hitzg:谢谢!我也错过了这个! - George

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接