Networkx:可视化MultiGraph时重叠边缘

时间:2013-02-24 16:14:14

标签: python python-2.7 matplotlib graphviz networkx

使用graphviz neato正确绘制以下多图(即平行边不重叠)以生成png(如this answer所示)

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中的draw方法防止重叠边缘?

由于

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

您可以使用已计算的节点位置直接使用matplotlib。

memcpy(shdm_ptr, umem, sizeof(struct xsk_umem))

enter image description here

答案 2 :(得分:2)

对上述答案的改进是在nx.draw中添加了connectionstyle参数:

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() 

See result here

答案 3 :(得分:1)

我知道它可能不是你正在寻找的东西,但是我遇到了类似的问题,我想要一个有向图,其中两个节点之间的边缘根据方向具有不同的权重(是否它进入或离开节点)我做的工作是我为每个边使用了不同的颜色,并减少了其中一个的不透明度,所以即使它们重叠也会显示。 我只需要在两个节点之间有两条边,所以它为我做了诀窍。

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() 

enter image description here