簡體   English   中英

Networkx:可視化 MultiGraph 時的重疊邊緣

[英]Networkx: Overlapping edges when visualizing MultiGraph

以下多圖正確繪制(即平行邊不重疊)使用graphvizneato生成png(如本答案所示)

import networkx as nx
nx.MultiGraph ([(1,2),(1,2),(1,2),(3,1),(3,2)])
nx.write_dot(Gm,'multi.dot')
!neato -T png multi.dot > multi.png

但是使用 Networkx 的繪圖功能並不能解決問題

nx.draw_graphviz(Gm,prog='neato')

是否可以使用 Networkx 的繪制方法來防止重疊邊緣?

謝謝

不幸的是沒有。 這在技術上是可行的,但到目前為止還沒有人編寫代碼。

您可以使用您計算出的節點位置直接使用 matplotlib。

G=nx.MultiGraph ([(1,2),(1,2),(1,2),(3,1),(3,2)])
pos = nx.random_layout(G)
nx.draw_networkx_nodes(G, pos, node_color = 'r', node_size = 100, alpha = 1)
ax = plt.gca()
for e in G.edges:
    ax.annotate("",
                xy=pos[e[0]], xycoords='data',
                xytext=pos[e[1]], textcoords='data',
                arrowprops=dict(arrowstyle="->", color="0.5",
                                shrinkA=5, shrinkB=5,
                                patchA=None, patchB=None,
                                connectionstyle="arc3,rad=rrr".replace('rrr',str(0.3*e[2])
                                ),
                                ),
                )
plt.axis('off')
plt.show()

在此處輸入圖片說明

好吧,我知道它可能不是您要找的東西,但是我遇到了類似的問題,我想要一個有向圖,其中兩個節點之間的邊根據方向(無論是進還是出)具有不同的權重節點),我所做的工作是我為每條邊使用了不同的顏色,並降低了其中一個的不透明度,這樣即使它們重疊也會顯示出來。 我的兩個節點之間只需要兩條邊,所以它對我有用。

G = nx.DiGraph()
G.add_nodes_from([0,1])
pos = nx.circular_layout(G)
nx.draw_networkx_nodes(G, pos, node_color = 'r', node_size = 100, alpha = 1)
nx.draw_networkx_edges(G, pos, edgelist = [(0,1)], width = 2, alpha = 0.5, edge_color='b')
nx.draw_networkx_edges(G, pos, edgelist= [(1,0)], width = 1, alpha = 1)
plt.axis('off')
plt.show() 

在此處輸入圖片說明

對上述答案的改進是將connectionstyle參數添加到 nx.draw:

import networkx as nx
G = nx.DiGraph()
G.add_nodes_from([0,1])
pos = nx.circular_layout(G)
nx.draw_networkx_nodes(G, pos, connectionstyle='arc3, rad = 0.1', node_color = 'r', node_size = 100, alpha = 1)
nx.draw_networkx_edges(G, pos,connectionstyle='arc3, rad = 0.1', edgelist = [(0,1)], width = 2, alpha = 0.5, edge_color='b')
nx.draw_networkx_edges(G, pos,connectionstyle='arc3, rad = 0.1', edgelist= [(1,0)], width = 1, alpha = 1)
plt.axis('off')
plt.show() 

在此處查看結果

暫無
暫無

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

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