Почему networkx перерисовывает мой график каждый раз? - PullRequest
0 голосов
/ 12 декабря 2018

Я хотел бы нарисовать график с ребрами, представляющими коэффициенты корреляции между узлами.У меня есть преимущество для каждого уникального отношения.График меняется каждый раз, когда я запускаю следующий код.Есть ли способ заставить одну форму графа?Кроме того, вы не уверены, правильно ли это генерирует график - пожалуйста, помогите со всем, что выглядит неправильно.

G = nx.Graph()
G.add_edge('A', 'B', weight=0.511012)
G.add_edge('A', 'C', weight=0.553063)
G.add_edge('A', 'D', weight=0.607859)
G.add_edge('A', 'E', weight=0.601554)
G.add_edge('A', 'F', weight=0.641796)

G.add_edge('B', 'C', weight=0.438743)
G.add_edge('B', 'D', weight=0.463087)
G.add_edge('B', 'E', weight=0.615150)
G.add_edge('B', 'F', weight=0.478853)

G.add_edge('C', 'D', weight=0.553063)
G.add_edge('C', 'E', weight=0.438743)
G.add_edge('C', 'F', weight=0.541893)

G.add_edge('D', 'E', weight=0.535331)
G.add_edge('D', 'F', weight=0.556995)

G.add_edge('E', 'F', weight=0.535446)

nx.draw(G, with_labels=True, node_color='orange', node_size=400, edge_color='black', linewidths=1, font_size=15)
plt.show()

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

По умолчанию 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 для более подробной информации.

0 голосов
/ 12 декабря 2018

Ваш код создает полный график.NetworkX не несет ответственности за способ визуализации графика, но за библиотеку подчеркивания, которую вы используете;Matplotlib в этом случае.Вы можете проверить, можете ли вы определить некоторые примитивы в этой библиотеке, чтобы каким-то образом сохранять один и тот же график для каждого прогона.

Кроме того, имейте в виду, что NetworkX не является инструментом для визуализации графиков согласно документации .

NetworkX предоставляет базовые функциональные возможности для визуализации графиков, но его основныеЦель состоит в том, чтобы включить анализ графика, а не выполнять визуализацию графика.В будущем функциональность визуализации графиков может быть удалена из NetworkX или доступна только как дополнительный пакет.

...