簡體   English   中英

在 NetworkX 中繪制將繪圖區域划分為 3 的圖形

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM