функции компоновки, такие как nx.spring_layout
, возвращают Dict, ключи являются узлами и значениями которых являются 2-кортежи (координаты). Вот пример того, что pos
ДИКТ может выглядеть следующим образом:
In [101]: pos
Out[101]:
{(0, 0): array([ 0.70821816, 0.03766149]),
(0, 1): array([ 0.97041253, 0.30382541]),
(0, 2): array([ 0.99647583, 0.63049339]),
(0, 3): array([ 0.86691957, 0.86393669]),
(1, 0): array([ 0.79471631, 0.08748146]),
(1, 1): array([ 0.71731384, 0.35520076]),
(1, 2): array([ 0.69295087, 0.71089292]),
(1, 3): array([ 0.63927851, 1. ]),
(2, 0): array([ 0.42228877, 0. ]),
(2, 1): array([ 0.33250362, 0.3165331 ]),
(2, 2): array([ 0.31084694, 0.69246818]),
(2, 3): array([ 0.34141212, 0.9952164 ]),
(3, 0): array([ 0.16734454, 0.11357547]),
(3, 1): array([ 0.01560951, 0.33063389]),
(3, 2): array([ 0. , 0.63044189]),
(3, 3): array([ 0.12242227, 0.85656669])}
Вы можете управлять эти координаты дальше, любой путь вы пожалуйста. Например, так как в x
и y
координате возвращаемый spring_layout
находится между 0 и 1, то можно добавить в 10 раз значения уровня слоя к y
-координате для разделения узлов на слои:
for node in pos:
level = node // nodes_per_layer
pos[node] += (0,10*level)
import networkx as nx
import matplotlib.pyplot as plt
layers = 5
nodes_per_layer = 3
n = layers * nodes_per_layer
p = 0.2
G = nx.fast_gnp_random_graph(n, p, seed=2017, directed=True)
pos = nx.spring_layout(G, iterations=100)
for node in pos:
level = node // nodes_per_layer
pos[node] += (0,10*level)
nx.draw(G, pos, node_size=650, node_color='#ffaaaa', with_labels=True)
plt.show()
производит
Не могли бы вы опубликовать пример изображения с желаемым результатом? – edo