[英]in NetworkX draw the graph dividing the plot area in 3
我在 Networkx 中有一個圖表,里面有不同的信息。 圖形節點如下所示:
G = nx.DiGraph()
G.add_node(shape1, level=1)
G.add_node(shape2, level=2)
G.add_node(shape3, level=2)
G.add_node(shape4, level=3)
...
我想繪制圖表,以便將第 1 級的所有形狀都放在繪圖的頂部,將第 3 級的所有形狀放在繪圖的下部,將第 2 級的所有形狀放在中間。 最多有3個級別。
我一直在閱讀 NetworkX 的文檔,但到目前為止,我只使用了節點的這種隨機定位:
pos = nx.spring_layout(G) nx.draw(G, pos)
。
你知道任何更聰明的方法來定位我想要的圖形節點嗎?
PS:所需的輸出大致是這樣的:
我也不需要畫線來划分層次,我只是把它們放在清楚我需要什么上。
提供給graphviz的界面的布局“點”似乎可以滿足您的需求。 當它適用於您提供的這個簡單圖形時,您可能需要調整輸出以獲取更大,更復雜的圖形。
import networkx as nx
G = nx.DiGraph()
G.add_node(1,level=1)
G.add_node(2,level=2)
G.add_node(3,level=2)
G.add_node(4,level=3)
G.add_edge(1,2)
G.add_edge(1,3)
G.add_edge(2,4)
import pylab as plt
nx.draw_graphviz(G, node_size=1600, cmap=plt.cm.Blues,
node_color=range(len(G)),
prog='dot')
plt.show()
NetworkX 2.6.2 的更新答案:
pos = nx.nx_pydot.graphviz_layout(G, prog="dot")
nx.draw(G, pos=pos, with_labels=True, font_weight='bold')
plt.show()
(確保您已安裝pydot
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.