Networkx:可视化MultiGraph时重叠边缘

Jua*_*nPi 12 python matplotlib graphviz networkx python-2.7

使用graphviz neato正确绘制以下多图(即平行边不重叠)以生成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
Run Code Online (Sandbox Code Playgroud)

但是,使用Networkx的绘图功能并不能解决问题

nx.draw_graphviz(Gm,prog='neato')
Run Code Online (Sandbox Code Playgroud)

是否可以使用Networkx的draw方法防止重叠边缘?

谢谢

Ari*_*ric 9

不幸的是.技术上可行,但到目前为止还没有人编写代码.


ato*_*3ls 6

您可以使用计算出的节点位置直接使用 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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述