Networkx graph: рисование графа для сети после удаления узлов

Может кто-нибудь помочь с этим. Я получаю сеть и рисую ее в виде графика, как показано ниже:

g = nx.DiGraph()
//creating the graph......
print(nx.info(g))

nx.info (g) сообщает мне, что количество узлов 18772.

Я получил график для него следующим образом:

Networkx graph: рисование графа для сети после удаления узлов

однако после удаления 30% наиболее важных узлов, как показано ниже:

thirty_percent = int(g.number_of_nodes() * 0.30)
temp_g = g.copy()
print('initial number of nodes:', g.number_of_nodes())
print('nodes deleted (30%):', thirty_percent)
mostImportantNodes = sorted(nx.degree_centrality(g).items(), key=lambda x: x[1], reverse=True)
for n in range(0, thirty_percent):
    node = mostImportantNodes[n][0]
    temp_g.remove_node(node)
print(nx.info(temp_g))
# drawing the network graph
print('Graph after removing 30% of the most important nodes:')
print(datetime.now())
plt.clf()
pos = nx.spring_layout(temp_g)
nx.draw_networkx_nodes(temp_g, pos, node_size=10)
nx.draw_networkx_edges(temp_g, pos, edge_color='black', alpha=0.1, arrows=True)
plt.show()
print(datetime.now())

Он дает правильную информацию о новом графике, но график графика очень плохой, кажется, что узлы были добавлены не удалено!

initial number of nodes: 18772
nodes deleted (30%): 5631
Name: 
Type: DiGraph
Number of nodes: 13141
Number of edges: 44911
Average in degree:   3.4176
Average out degree:   3.4176
highest 5 degrees:  [40, 40, 38, 36, 36]

Networkx graph: рисование графа для сети после удаления узлов

Извините, но я не могу воспроизвести вашу проблему. Можете ли вы опубликовать небольшой образец кода, демонстрирующий вашу проблему?

Laurent LAPORTE 06.04.2021 23:25

@LaurentLAPORTE, спасибо за внимание. Я попытался свести к минимуму первую часть демонстрации, но я оставил вторую часть, чтобы, если в ней возникнут проблемы, каждый может помочь. проблема в том, что при фактическом удалении 30% исходного графика показано, что он работает нормально, когда я получаю nx.info (temp_g), удаляется нужное количество узлов, но построение нового графика temp_g показывает увеличение узлов, Я не могу понять, почему это происходит.

Batoul Diab 06.04.2021 23:47

Попробуйте сменить sorted(nx.degree_centrality(g).items() на sorted(nx.degree_centrality(temp_g).items().

swatchai 07.04.2021 08:28

@swatchai это не изменилось: / сюжет все тот же

Batoul Diab 07.04.2021 10:52

Я думаю, что вы видите ожидаемое поведение spring_layout. Все узлы отталкиваются друг от друга (но связанные узлы также притягиваются друг к другу). Таким образом, несвязанные узлы будут постоянно удаляться от центра всех узлов, образуя кольцо. Удалив узлы наивысшей степени, вы увеличили количество неподключенных узлов и, следовательно, сделали кольцо шире. Многие алгоритмы компоновки предполагают использование одного компонента и плохо обрабатывают несвязанные узлы или компоненты. У меня есть ответ здесь с некоторыми подходами к решению этой проблемы.

Paul Brodersen 07.04.2021 13:25

@PaulBrodersen, ладно, теперь все ясно! большое спасибо за объяснение

Batoul Diab 07.04.2021 21:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
32
0

Другие вопросы по теме