有没有办法在最后重写我的代码,使其生成的图表看起来像这样
而不是像这样
作为奖励,有人知道如何像第一张照片中那样在节点上方放置文本标签吗?
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()
您可以使用 graphviz 布局和 dot 程序来获得非常接近的效果:
pos=nx.drawing.nx_agraph.graphviz_layout(G, prog='dot', args='-Grankdir=LR')
如果你想让排名匹配,那就有点复杂了。使用这个答案,你可以做这样的事情:
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'))
这会导致: