如何以创建平行四边形的方式连接点
How to connect the points in such a way that a parallelogram is created
我有四个坐标 df
table:
lat1
lon1
lat2
lon2
lat3
lon3
lat4
lon4
51.071833
6.237204
51.071836
6.237195
51.071833
6.237195
51.071836
6.237204
根据这些数据,我尝试以创建平行四边形的方式连接点。
散点图:
# selecting columns start with 'lat'
xx = df[[col for col in test if col.startswith('lat')]].stack().to_list()
# selecting columns start with 'lon'
yy = df[[col for col in test if col.startswith('lon')]].stack().to_list()
plt.scatter(xx,yy)
不幸的是,当我尝试用线连接点时,它不起作用:
plt.scatter(xx,yy)
plt.plot(xx,yy)
预期结果:
我猜是因为积分没有排序。我也试过这个:
points = np.c_[xx, yy]
from sklearn.neighbors import NearestNeighbors
clf = NearestNeighbors(2).fit(points)
G = clf.kneighbors_graph()
import networkx as nx
T = nx.from_scipy_sparse_matrix(G)
order = list(nx.dfs_preorder_nodes(T, 0))
xx = xx[order]
yy = yy[order]
plt.plot(xx, yy)
plt.show()
但还是不正确。
你知道问题出在哪里吗?
谢谢
可以算出四个点的convex hull:
import numpy as np
points=np.column_stack((xx,yy))
from scipy.spatial import ConvexHull
hull = ConvexHull(points)
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'k-')
结果:
我有四个坐标 df
table:
lat1 | lon1 | lat2 | lon2 | lat3 | lon3 | lat4 | lon4 |
---|---|---|---|---|---|---|---|
51.071833 | 6.237204 | 51.071836 | 6.237195 | 51.071833 | 6.237195 | 51.071836 | 6.237204 |
根据这些数据,我尝试以创建平行四边形的方式连接点。
散点图:
# selecting columns start with 'lat'
xx = df[[col for col in test if col.startswith('lat')]].stack().to_list()
# selecting columns start with 'lon'
yy = df[[col for col in test if col.startswith('lon')]].stack().to_list()
plt.scatter(xx,yy)
不幸的是,当我尝试用线连接点时,它不起作用:
plt.scatter(xx,yy)
plt.plot(xx,yy)
预期结果:
我猜是因为积分没有排序。我也试过这个:
points = np.c_[xx, yy]
from sklearn.neighbors import NearestNeighbors
clf = NearestNeighbors(2).fit(points)
G = clf.kneighbors_graph()
import networkx as nx
T = nx.from_scipy_sparse_matrix(G)
order = list(nx.dfs_preorder_nodes(T, 0))
xx = xx[order]
yy = yy[order]
plt.plot(xx, yy)
plt.show()
但还是不正确。
你知道问题出在哪里吗?
谢谢
可以算出四个点的convex hull:
import numpy as np
points=np.column_stack((xx,yy))
from scipy.spatial import ConvexHull
hull = ConvexHull(points)
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'k-')
结果: