NetworkX:让箭头/边缘指向右侧

问题描述 投票:0回答:1

有没有办法在最后重写我的代码,使其生成的图表看起来像这样

enter image description here

而不是像这样

enter image description here

作为奖励,有人知道如何像第一张照片中那样在节点上方放置文本标签吗?

import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()
G.add_edges_from([(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (4, 7), (5, 7), (3, 8), (5, 8), (7, 9), (8, 9), (6, 10), (9, 10)])

pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size=500)
nx.draw_networkx_edges(G, pos, edgelist=G.edges())
nx.draw_networkx_labels(G, pos)

plt.show()
python networkx
1个回答
0
投票

您可以使用 graphviz 布局和 dot 程序来获得非常接近的效果:

pos=nx.drawing.nx_agraph.graphviz_layout(G, prog='dot', args='-Grankdir=LR')

这将导致以下情节: Using graphviz layout

如果你想让排名匹配,那就有点复杂了。使用这个答案,你可以做这样的事情:

A = nx.nx_agraph.to_agraph(G)
A.add_subgraph([2,3], rank='same')
A.add_subgraph([4,5], rank='same')
A.add_subgraph([7,8,6], rank='same')
with open('my_graph.png', 'wb') as f:
    f.write(A.draw(prog='dot', format='png', args='-Grankdir=LR'))

这会导致:

Using subgraph ranking

© www.soinside.com 2019 - 2024. All rights reserved.