По умолчанию nx.draw
используется nx.spring_layout
для установки позиций узлов.Если начальное число не подается в nx.spring_layout
, оно начинается со случайного начального условия, а затем использует движения, основанные на обработке ребер как пружин, а узлов - как масс, чтобы изменить положение узлов.Из-за этого случайного начального условия позиции будут отличаться каждый раз.
Однако, часто мы можем захотеть использовать несколько команд рисования для рисования узлов или ребер (например, если мы хотим, чтобы некоторые узлы одного размера илистиль и другие узлы в другом размере или стиле).Для этого nx.draw
принимает необязательный аргумент pos
, который представляет собой словарь, ключами которого являются узлы, а значения которого являются 2-кортежами, дающими их (x, y) координаты.В Networkx есть несколько функций, которые назначают позиции с использованием разных правил, и, как я уже говорил выше, по умолчанию используется случайное начальное условие, поэтому каждый раз будут выдаваться разные выходные данные.
В вашем случае вы хотите быть уверены, что сетьдается одна и та же позиция каждый раз, когда вы запускаете свой код.Таким образом, вы должны подать начальное число в команду, которая устанавливает позиции.
#code to generate graph G here.
my_pos = nx.spring_layout(G, seed = 100)
nx.draw(G, pos = my_pos, with_labels=True, node_color='orange', node_size=400, edge_color='black', linewidths=1, font_size=15)
plt.show()
Можно разрешить веса ребер так, чтобы компоновка пружины действовала так, как если бы большие веса были более сильными пружинами.Обратитесь к документации по spring_layout для более подробной информации.