为复杂形状排序数据 - python

时间:2016-04-30 15:40:53

标签: python sorting matplotlib plot

假设我有一组给定的点,我使用CSV导入。我的最终目标是获取此XY数据,将其转换为极坐标形式,找到平滑线并最终获得残差图(在极坐标图和平滑线之间)。

(在代码中你会看到我在转换为极地之前将xy数据集中在一起)

所以最初我使用了数据,发现数据似乎混乱不堪。因此,当我转换为极地并找到残差时,它看起来很糟糕。 我想我需要事先对数据进行排序。

当我绘制xy时我需要看到的内容(大致)与我绘制xy时所看到的内容的比较显示在链接中:

http://imgur.com/a/DYw85

我的导入和绘制数据的代码在这里:

def cart2pol(x, y):
 rho = np.sqrt(x**2 + y**2)
 phi = np.arctan2(y, x)
 return(rho, phi)

def extract():
 filename = "C:/Users/dsfsdf/Dropbox/rthrth/xy50.csv"
 data = {}
 data = np.genfromtxt(filename,delimiter=',',dtype= float)
 block.append(data)
 x.append(block[0][:,0])
 y.append(block[0][:,1])

extract()
x = np.asarray(x)
y = np.asarray(y)
y = y-min(y[0,:]) #To centre it on the y-axis
x = x - ((max(x[0,:])+min(x[0,:]))/2)  #To centre it on the x-axis
xf = x[0,:]
yf = y[0,:]
[rf,th] = cart2pol(xf,yf)
thf = th-np.pi / 2 

plt.subplot(121)
plt.plot(yf,xf)
plt.xlabel('y')
plt.ylabel('x')
plt.subplot(122)
plt.plot(thf,rf)
plt.xlabel(r'$\theta$')
plt.ylabel('r')

我已尝试使用此代码进行顺时针排序,这是我在另一个帖子中找到的,它有很多帮助,但并没有完全解决问题:

def clockwise(x,y):
 cx = np.mean(x)
 cy = np.mean(y)
 a = np.arctan2(y - cy, x - cx)
 order = a.ravel().argsort()
 x = x[order]
 y = y[order]
 return np.vstack([x,y]) 

下面是你得到的情节:http://imgur.com/pvxoZHo

这个过程有什么问题?我需要修复数据排序吗?我应该排序xy数据 - >然后去极地或去极地然后排序? 如何对数据进行排序以使绘图正确连接?

感谢您的帮助

0 个答案:

没有答案