向networkx现有网络新增节点并按规则配置节点颜色方法咨询
实现方案
通过networkx原生的增量更新方法即可实现需求,无需重构原有网络,步骤如下:
- 用新增边表生成临时子图,调用现有图的
update()方法合并临时子图:该方法不会修改原有节点的已有属性,也不会重复创建已存在的节点和边,仅自动新增不存在的节点和边 - 筛选出所有未设置颜色属性的新增节点,按照原有规则匹配
attributes_df中的属性生成颜色映射,无匹配的节点填充黑色后写入节点属性
完整实现代码:
# 以下代码承接你已有的网络构建逻辑 # 1. 合并新增边到现有网络 new_edge_graph = nx.from_pandas_edgelist(new_df, source='Node', target='Edge') G.update(new_edge_graph) # 2. 筛选新增的无颜色属性节点 nodes_with_colour = [node for node, attr in G.nodes(data=True) if 'colour' in attr] new_added_nodes = list(set(G.nodes()) - set(nodes_with_colour)) # 3. 生成新增节点的颜色映射 colour_mapper = {-1.5: 'grey', -1: 'red', 0: 'orange', 1: 'yellow', 1.5: 'green'} new_node_colour = ( attributes_df.set_index('Node')['Attribute'] .map(colour_mapper) .reindex(new_added_nodes, fill_value='black') .to_dict() ) # 4. 写入新增节点的颜色属性 nx.set_node_attributes(G, new_node_colour, name="colour") # 绘制验证效果 nx.draw(G, node_color=nx.get_node_attributes(G, 'colour').values(), with_labels=True)
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

