簡體   English   中英

為什么在繪制圖形邊緣時 nx.draw_networkx_edges 不連接節點?

[英]Why does nx.draw_networkx_edges not connect the nodes when plotting graph edges?

我有一個要繪制的圖G G是一個空間有向圖,因此我的節點具有我想要繪制它們的特定坐標。 該圖是使用此處的sknw.build_sknw從圖像的形態骨架構建的(但我認為它沒有發揮重要作用)。 但是,在繪圖時,我遇到了一些邊連接問題,其中兩個相鄰節點之間的某些邊在圖中沒有連接。 它們指向正確的方向,但太短了。 然而,這只發生在一些邊上。 大多數都正確可視化:

不連接節點的邊

以下是重現錯誤的 3 個節點和 2 個邊的最小示例:

我正在通過以下方式從邊緣列表中讀取圖表:

G = nx.read_edgelist('test.edgelist', data=True, create_using=nx.DiGraph())

test.edgelist如下所示:

2789 2762 {'pts': [[697, 259], [698, 259], [699, 259], [700, 259], [701, 259], [702, 259], [703, 259], [704, 259], [705, 259]], 'weight': 8.0}
2789 2823 {'pts': [[708, 264], [707, 265], [706, 266], [706, 267], [706, 268], [706, 269], [705, 270], [704, 271], [703, 272], [702, 273], [701, 274], [700, 275], [699, 275], [698, 275], [697, 275], [696, 275], [695, 276], [695, 277], [695, 278], [695, 279], [695, 280], [695, 281], [695, 282], [696, 283], [697, 284], [697, 285], [697, 286], [697, 287], [698, 288], [698, 289], [699, 290], [699, 291], [699, 292], [699, 293], [700, 294], [700, 295], [701, 296], [701, 297], [701, 298], [702, 299], [702, 300], [703, 301], [704, 302], [705, 303], [706, 304], [707, 305], [707, 306], [708, 307], [708, 308], [709, 309], [710, 309], [711, 310], [712, 310], [713, 310]], 'weight': 62.94112549695427}

'pts' 列表對應於原始形態骨架(第一張圖像中的白色)的像素,它們位於兩個交叉點(也就是我的圖中的節點)之間。

我使用nx.draw_networkx_edgesnx.draw_networkx_nodes來繪制我的圖形。 我使用坐標字典coord_dict定義布局,如下所示:

coord_dict = {'2789': [707, 261], '2823': [714, 311], '2762': [695, 259]}

現在,每當我使用以下代碼繪制圖形時:

edges = nx.draw_networkx_edges(G, pos=coord_dict, arrows=True, arrowstyle='->', edge_color='green', arrowsize=0.75, width=0.45, ax=ax)
nodes = nx.draw_networkx_nodes(G, pos=coord_dict, node_size=0.15, node_color='red')

我得到一個這樣的圖,其中邊不連接到第二個節點: networkx 繪圖錯誤

我發現,當不通過arrows=False繪制邊緣時,直邊將連接。 但是,箭頭對我的可視化很重要,因此我將不勝感激任何有關克服此繪圖問題的幫助。 另外,我想了解為什么某些箭頭可以正確連接而其他箭頭不能正確連接的一般問題。 謝謝!

發生這種情況是因為邊和節點是獨立生成的,手動設置大小和寬度可能會導致節點與邊稍微分開。 如果您不需要單獨繪制它們,只需通過一次調用nx.draw即可nx.draw

nx.draw(G, pos=coord_dict, 
        arrowstyle='->', 
        arrowsize=20, 
        width=2,
        with_labels=True, 
        node_size=500, 
        node_color='orange',
        edge_color='green')

在此處輸入圖片說明

或者,與您所做的相同,但避免自定義節點和箭頭大小:

plt.figure(figsize=(8,5))
ax = plt.gca()
nx.draw_networkx_edges(G, pos=coord_dict, arrows=True, arrowstyle='->', 
                       edge_color='green', width=2, ax=ax)
nx.draw_networkx_nodes(G, pos=coord_dict, node_color='orange')
nx.draw_networkx_labels(G, pos=coord_dict)
plt.box(False)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM