Визуализация перегородок Louvain в Networkx - PullRequest
2 голосов
/ 14 июля 2020

Помогите, пожалуйста, изменить визуализацию результата алгоритма кластеризации Лувена. Я взял код с сайта https://github.com/taynaud/python-louvain Можно ли переписать код, чтобы каждый кластер имел свою форму (круг, треугольник, квадрат ...)?

import community as community_louvain
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import networkx as nx

# load the karate club graph
G = nx.karate_club_graph()

# compute the best partition
partition = community_louvain.best_partition(G)

# draw the graph
pos = nx.spring_layout(G)
# color the nodes according to their partition
cmap = cm.get_cmap('viridis', max(partition.values()) + 1)
nx.draw_networkx_nodes(G, pos, partition.keys(), node_size=40,
                       cmap=cmap, node_color=list(partition.values()))
nx.draw_networkx_edges(G, pos, alpha=0.5)
plt.show()

1 Ответ

2 голосов
/ 14 июля 2020

К сожалению, nx.draw_networkx_nodes не принимает итерацию фигур, поэтому вам придется l oop по узлам и строить их индивидуально. Кроме того, нам придется проиндексировать сгенерированный cmap, иначе однозначные значения сообщества будут сопоставлены с тем же начальным цветом cmap. Для возможных форм я просто копирую строку доступных форм, упомянутых в docs , и индексирую ее на основе номера раздела:

# load the karate club graph
G = nx.karate_club_graph()

# compute the best partition
partition = community_louvain.best_partition(G)

cmap = cm.get_cmap('viridis', max(partition.values()) + 1)
shapes = 'so^>v<dph8'

plt.figure(figsize=(12,8))
# draw the graph
pos = nx.spring_layout(G)
# color the nodes according to their partition
cmap = cm.get_cmap('viridis', max(partition.values()) + 1)
nx.draw_networkx_edges(G, pos, alpha=0.5)
for node, color in partition.items():
    nx.draw_networkx_nodes(G, pos, [node], node_size=100,
                           node_color=[cmap.colors[color]],
                           node_shape=shapes[color])

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...