如何在绘制degree_centrality图时筛选指定数值范围的节点
筛选指定度中心性范围的节点并可视化
步骤1:筛选符合条件的节点及其度中心性值
通过字典推导式从全量节点的度中心性结果中,筛选出数值在0.60到0.64之间的节点:
# 获取所有节点的度中心性 all_degree = nx.degree_centrality(G) # 筛选0.60 ≤ 度中心性 ≤ 0.64的节点 filtered_degree = {node: score for node, score in all_degree.items() if 0.60 <= score <= 0.64}
步骤2:可视化筛选后的节点
根据需求选择以下两种可视化方式:
方式一:仅展示筛选节点及其关联边
如果需要只呈现筛选节点构成的子图,先提取子图再调用原绘图函数:
# 提取筛选节点对应的子图 G_filtered = G.subgraph(filtered_degree.keys()) # 使用原布局绘制子图 draw(G_filtered, pos, filtered_degree, 'Degree Centrality (0.60-0.64)')
方式二:保留全图结构,高亮筛选节点
如果需要保留完整网络结构,仅突出显示目标节点,可以修改绘图函数:
def draw_filtered(G, pos, filtered_measures, measure_name): # 先绘制所有非目标节点为灰色 nx.draw_networkx_nodes(G, pos, node_size=250, node_color='lightgray', nodelist=[n for n in G.nodes() if n not in filtered_measures.keys()]) # 绘制目标节点,用度中心性值着色 nodes = nx.draw_networkx_nodes(G, pos, node_size=300, cmap=plt.cm.plasma, node_color=list(filtered_measures.values()), nodelist=filtered_measures.keys()) nodes.set_norm(mcolors.SymLogNorm(linthresh=0.01, linscale=1, base=10)) # 绘制所有边 nx.draw_networkx_edges(G, pos) # 添加标题和颜色条 plt.title(measure_name) plt.colorbar(nodes) plt.axis('off') plt.show() # 调用修改后的绘图函数 draw_filtered(G, pos, filtered_degree, 'Degree Centrality (0.60-0.64 Highlighted)')
简化调用方式(仅显示筛选节点,保留全图边)
如果不需要调整非目标节点样式,直接将筛选结果传入原draw函数即可:
draw(G, pos, filtered_degree, 'Degree Centrality (0.60-0.64)')
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

