我有一组(x,y)坐标,我想使用这些(x,y)坐标创建一个图形(igraph)。首先,我从这里创建Delaunay三角形,然后使用"delaunay.simplices“查找边缘,以便在in中使用它。问题是,我的数据点几乎是在一个完整的圆圈上(这是视网膜细胞的位置)。问题是,当我绘制Delaunay图时,它会将彼此相距较远的点连接起来(请参阅附图)。我如何创建一个Delaunay三角形的方式,只是点是相互联系的?换句话说,我需要去除整个圆圈(视网膜)的边缘。数据点样本:
[[ -337.97697446, 7540.58307945],
[-1815.6445473 , 7056.03016277],
[ -443.129876 , 742.95651638],
[ 560.91116647, 8221.13103087],
[-2043.59680333, 6927.41838391],
[-3176.31452551, 3346.89857915],
[ -784.1490326 , 760.8154378 ],
[ 5170.40467349, 8136.41340492],
[ -742.23061811, 799.05871867],
[ 1462.82113245, 978.95894247],
[-1874.57436117, 6983.1503229 ],
[-2310.81830323, 1530.35866448],
[-2910.71747603, 5246.51145717],
[ -888.21996994, 798.45066095],
[ 4498.63094122, 8260.69637833],
[-2899.33052683, 2130.60899211],
[-1700.36710286, 7173.3962959 ],
[-1610.2063535 , 7214.58267473],
[ 1378.99115594, 8329.96965215],
[-3089.39467232, 2513.75733145],
[-3194.07782921, 3820.99309382],
[-3209.92285253, 2896.37506385],
[ 7197.81822286, 5896.18071003],
[ -450.75080896, 7525.26743227],
[ -113.62034104, 627.17361551],
[-3263.17851197, 3425.66085986],
[ 3692.02214764, 8503.70959198],
[ 2074.11632568, 8349.8755875 ],
[ 6015.49872449, 3635.69969512],
[ 7003.71354705, 6648.72238021],
[ 6912.25041128, 4732.48378599],
[ 3171.75729506, 8364.60820082],
[-2218.36898372, 1409.32375715],
[ 6695.93283727, 7010.2533557 ],
[ 2189.84584047, 8368.56645389],
[ 3406.81534596, 8432.77932065],
[-2569.97377757, 6210.20316803],
[ 4238.33917379, 8285.06998187],
[ 2260.16101844, 8429.82132311],
[ 3519.53740115, 8291.11207523],
[ 2682.00418224, 8356.9073382 ],
[ 3583.38759555, 8341.96511715],
[-2480.84539734, 6324.03943137],
[-1608.29692142, 7137.9205374 ],
[ 4772.58940226, 8312.16759039],
[ 912.35520444, 8313.72411438],
[ 6951.82432889, 6805.60977411],
[ 4631.51637666, 8359.21654299],
[-2960.74382434, 5388.2309139 ],
[-1554.58457283, 1103.3527351 ]]

发布于 2022-05-20 21:41:34
计算距离矩阵,然后过滤出彼此间距离最短的点;对于大型数据集(数百个点)可能需要一段时间。
发布于 2022-06-11 21:37:57
我是格拉维斯的作者,这是一个开放源代码的包,用于在Python中进行交互式图形可视化。它可以从网络分析库中识别图形对象,如NetworkX、igraph、图形工具等.
这里有一个解决方案,它使用scipy计算一个Delaunay三角剖分,NetworkX创建一个图形,并将其可视化。它使用三角剖分的凸包连接最外面的点(红色边),然后简单地连接内部点(黑色边),但只有那些在选定的阈值范围内,你可以根据需要变化。我已经使用了你在问题中提供的观点。
import math
import gravis as gv
import networkx as nx
import scipy.spatial
triangulation = scipy.spatial.Delaunay(points)
g = nx.Graph()
for i, (x, y) in enumerate(points):
g.add_node(i, x=x/10, y=y/10)
for i, j in triangulation.convex_hull:
g.add_edge(i, j, color='red', size=2)
threshold = 2000
for i, j, k in triangulation.simplices:
for a, b in [(i, j), (j, k), (k, i)]:
p1 = points[a]
p2 = points[b]
distance = math.dist(p1, p2)
if distance < threshold:
g.add_edge(a, b)
gv.d3(g)结果是木星笔记本电脑:图形可视化
https://stackoverflow.com/questions/72325000
复制相似问题