Раскрасьте каждое Сообщество Узлов, используя алгоритм Лувена и NetworkX / Сохраните результат в новый текстовый файл - PullRequest
0 голосов
/ 09 марта 2020

Я использую алгоритм Лувена ниже для обнаружения сообщества с помощью графиков, которые я вставляю вручную. У меня есть 2 проблемы здесь. Первый из них касается цвета узлов. Цвет каждого сообщества узлов, как вы видите ниже, немного темный или белый, и неясно, какие именно сообщества являются точными.

enter image description here

Итак, как можно нарисовать каждое сообщество узлов в более яркие цвета?

И мой последний вопрос, есть ли идеи сохранить результаты в новом .txt после обнаружение сообщества сделано?

    partition = community.best_partition(G)
    values = [partition.get(node) for node in G.nodes()]

    #drawing
    size = float(len(set(partition.values())))
    posi = nx.spring_layout(G)
    count = 0
    for com in set(partition.values()):
        count = count + 1.
        list_nodes = [nodes for nodes in partition.keys()
                        if partition[nodes] == com]
        nx.draw_networkx_nodes(G, posi, list_nodes,  node_size = 25, node_color=str(count/size))

        #nx.draw_spring(G, cmap = plt.get_cmap('hsv'), node_color = values, node_size=30, with_labels=False)

    nx.draw_networkx_edges(G, posi, alpha=0.5)
    plt.show()

1 Ответ

1 голос
/ 09 марта 2020

Вы можете использовать cmap параметр draw_networkx_nodes, который позволяет вам указать любой matplotlib.colormap. Смотрите, например, здесь или здесь1 .

Пример минимальной рабочей раскраски:

import networkx as nx
import matplotlib.pylab as pl

graph = nx.karate_club_graph()

colors = []
for node in graph:
    if graph.nodes[node]["club"] == "Mr. Hi":
        colors.append(0)
    else:
        colors.append(1)

colors[0] = -1
colors[-1] = 2

nx.draw_networkx(graph, node_color=colors, vmin=min(colors), vmax=max(colors), cmap=pl.get_cmap("viridis"))
pl.axis("off")
pl.show()

Для сохранения графика вы можете выбрать подходящий формат графика, например GML . Затем вам сначала нужно добавить раздел как атрибут узла к вашему графику:

for node in partition:
    G.nodes[node]["cluster"] = partition[node]
# save file
nx.write_gml(G, "path_to_save_file")
# load file
saved_graph = nx.read_gml("path_to_save_file")

и затем сохранить график вместе с разделом. Кроме того, вы можете сохранить полученный раздел как json или (небезопасно) через pickle.

...