networkx 读取图形时如何保持图形形状

How to keep graph shape when read it by networkx

我有一个文件显示不同点的坐标(前 10 行):

1 10.381090522139 55.39134945301
2 10.37928179195319 55.38858713256631
3 10.387152479898077 55.3923338690609
4 10.380048819655258 55.393938880906745
5 10.380679138517507 55.39459444742785
6 10.382474625286 55.392132993022
7 10.383736185130601 55.39454404088371
8 10.387334283235987 55.39433237195271
9 10.388468103023115 55.39536574771765
10 10.390814951258335 55.396308397998475

现在我想计算它们的MST(最小生成树)所以首先我将我的坐标更改为权重图(距离->权重):

n = 10
data = []
for i in range(0, n):
    
    for j in range(i + 1, n):
        temp = []
        temp.append(i)
        temp.append(j)
        x = np.array(rawdata[i, 1:3])
        y = np.array(rawdata[j, 1:3])
        temp.append(np.linalg.norm(x - y))
        data.append(temp)

然后,使用networkx加载权重数据:

G = nx.read_weighted_edgelist("data.txt")
T = nx.minimum_spanning_tree(G)
nx.draw(T)
plt.show()

但我无法从结果中看到原始形状:

如何解决这个问题?

我只是回答关于节点位置的问题。我无法从你所做的事情中判断出最小生成树是否是你所追求的。

绘制网络时,它会根据部分随机的算法分配位置。如果您希望节点到达特定位置,则必须在可选参数的调用中包含该信息。所以定义一个字典(它通常被称为 pos)使得 pos[node] 是一个元组 (x,y) 其中 xnode 和 [=15 的 x 坐标=] 是 node.

的 y 坐标

那么通话是nx.draw(T, pos=pos).