如何使用matplotlib或graphviz在networkx中绘制多图

时间:2013-02-18 18:58:00

标签: python-2.7 networkx

当我将多图块numpy邻接矩阵传递给networkx时(使用from_numpy_matrix函数) 然后尝试使用matplotlib绘制图形,它忽略多个边缘。

我怎样才能让它绘制多条边?

3 个答案:

答案 0 :(得分:17)

Graphviz可以很好地绘制平行边。您可以通过编写点文件然后使用Graphviz处理(例如下面的neato布局)来使用NetworkX。除了NetworkX

之外,您还需要pydot或pygraphviz
In [1]: import networkx as nx

In [2]: G=nx.MultiGraph()

In [3]: G.add_edge(1,2)

In [4]: G.add_edge(1,2)

In [5]: nx.write_dot(G,'multi.dot')

In [6]: !neato -T png multi.dot > multi.png

enter image description here

在NetworkX 1.11及更新版本上,nx.write_dot不按issue on networkx github工作。解决方法是使用

调用write_dot

from networkx.drawing.nx_pydot import write_dot

from networkx.drawing.nx_agraph import write_dot

答案 1 :(得分:3)

您可以在计算出的节点位置上直接使用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()

enter image description here

答案 2 :(得分:1)

您可以使用pyvis软件包。
我只是将这段代码从我的实际项目中复制粘贴到Jupyter笔记本中。

@"%__APPDIR__%WindowsPowerShell\v1.0\powershell.exe" -NoProfile -Command "Remove-Item -Path 'C:\Users\xMRi\Desktop\*' -Include '*.lic' -Force"

result