使用NetworkX绘制社区结构存在问题,请求排查代码错误
代码错误分析与修正
错误点:
greedy是社区集合的列表,没有values()方法,直接调用会报错。你需要把每个节点映射到对应的社区编号,才能生成节点颜色列表。plt.show(G)是错误的,plt.show()不需要传入图对象。
修正后的代码:
import networkx as nx import matplotlib.pyplot as plt import networkx.algorithms.community as nxcom G = nx.karate_club_graph() # 贪心算法划分社区 greedy_communities = nxcom.greedy_modularity_communities(G) # 构建节点到社区编号的映射 node_to_community = {} for community_id, nodes in enumerate(greedy_communities): for node in nodes: node_to_community[node] = community_id # 生成每个节点对应的社区编号(作为颜色值) node_colors = [node_to_community[node] for node in G.nodes()] pos = nx.spring_layout(G) # 计算图布局 plt.axis('off') # 绘制节点,用社区编号作为颜色依据 nx.draw_networkx_nodes(G, pos, cmap=plt.cm.RdYlBu, node_color=node_colors) # 补充绘制边,让图更完整 nx.draw_networkx_edges(G, pos, alpha=0.3) plt.show()
说明:
- 先通过
enumerate给每个社区分配一个编号,再把每个节点映射到对应的编号。 - 用节点的社区编号作为
node_color的参数,这样同一社区的节点会显示同色系的颜色。 - 加上边的绘制,让可视化效果更清晰,符合社区结构展示的需求。
内容的提问来源于stack exchange,提问作者bombombs
相关产品推荐
相关产品推荐

