如何扩展greedy_modularity_communities检测的社区列表并迭代绘制网络社区
社区检测批量绘制适配方案
你不需要手动定义单个community_x变量,直接对社区检测结果做遍历即可,同时适配任意数量的检测结果,以下是可直接运行的完整实现:
import networkx as nx import matplotlib.pyplot as plt from networkx.algorithms.community.modularity_max import greedy_modularity_communities # 初始化图,可替换为自定义图 G = nx.karate_club_graph() circ_pos = nx.circular_layout(G) # 社区检测 communities = list(greedy_modularity_communities(G)) # 批量完成所有社区的排序,需访问第i个社区时取sorted_communities[i]即可 sorted_communities = [sorted(comm) for comm in communities] # 调色板,社区数量多可替换为其他cmap如plt.cm.hsv color_palette = plt.cm.tab10.colors # 迭代绘制所有社区 for comm_idx, node_list in enumerate(sorted_communities): nx.draw_networkx_nodes( G, circ_pos, nodelist=node_list, node_color=color_palette[comm_idx % len(color_palette)], alpha=0.5 ) # 可选补充绘制边和标签 nx.draw_networkx_edges(G, circ_pos, alpha=0.2) nx.draw_networkx_labels(G, circ_pos, font_size=8) plt.axis("off") plt.show()
关键逻辑说明
- 列表推导式批量处理所有社区排序,避免手动定义单个变量,完全适配任意数量的社区检测结果
- 用
enumerate遍历社区列表自动获取索引和对应节点列表,无需重复编写绘制代码 - 取模运算
%实现颜色循环,解决社区数量超过调色板颜色数的适配问题
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

