Может кто-нибудь помочь с этим. Я получаю сеть и рисую ее в виде графика, как показано ниже:
g = nx.DiGraph()
//creating the graph......
print(nx.info(g))
nx.info (g) сообщает мне, что количество узлов 18772.
Я получил график для него следующим образом:
однако после удаления 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]
@LaurentLAPORTE, спасибо за внимание. Я попытался свести к минимуму первую часть демонстрации, но я оставил вторую часть, чтобы, если в ней возникнут проблемы, каждый может помочь. проблема в том, что при фактическом удалении 30% исходного графика показано, что он работает нормально, когда я получаю nx.info (temp_g), удаляется нужное количество узлов, но построение нового графика temp_g показывает увеличение узлов, Я не могу понять, почему это происходит.
Попробуйте сменить sorted(nx.degree_centrality(g).items() на sorted(nx.degree_centrality(temp_g).items().
@swatchai это не изменилось: / сюжет все тот же
Я думаю, что вы видите ожидаемое поведение spring_layout. Все узлы отталкиваются друг от друга (но связанные узлы также притягиваются друг к другу). Таким образом, несвязанные узлы будут постоянно удаляться от центра всех узлов, образуя кольцо. Удалив узлы наивысшей степени, вы увеличили количество неподключенных узлов и, следовательно, сделали кольцо шире. Многие алгоритмы компоновки предполагают использование одного компонента и плохо обрабатывают несвязанные узлы или компоненты. У меня есть ответ здесь с некоторыми подходами к решению этой проблемы.
@PaulBrodersen, ладно, теперь все ясно! большое спасибо за объяснение






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