请帮我改变Louvain聚类算法结果的可视化。 我从网站上获取了代码 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()
最佳答案
不幸的是nx.draw_networkx_nodes
不接受可迭代的形状,因此您必须循环遍历节点并单独绘制它们。此外,我们必须对生成的 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])
关于python - Networkx 中 Louvain 分区的可视化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62890682/