向现有网络添加新节点

Adding new nodes to an existing network

我有一个网络(使用 networkx 构建),它考虑了以下几个方面:

例如,您可以参考以下内容:

import networkx as nx
import pandas as pd

edges_df = pd.DataFrame({
    'Node': ['A', 'A', 'B', 'B', 'B', 'S'],
    'Edge': ['B', 'D', 'N', 'A', 'X', 'C']
})

attributes_df = pd.DataFrame({
    'Node': ['A', 'B', 'C', 'D', 'N', 'S', 'X'],
    'Attribute': [-1, 0, -1.5, 1, 1, 1.5, 0]
})

G = nx.from_pandas_edgelist(edges_df, source='Node', target='Edge')

mapper = {-1.5: 'grey', -1: 'red', 0: 'orange', 1: 'yellow', 1.5: 'green'}
colour_map = (
attributes_df.set_index('Node')['Attribute'].map(mapper)
    .reindex(G.nodes(), fill_value='black')
)

# Add Attribute to each node
nx.set_node_attributes(G, colour_map, name="colour")

# Then draw with colours based on attribute values:
nx.draw(G, 
        node_color=nx.get_node_attributes(G, 'colour').values(),
        with_labels=True)

我想在现有网络中添加一个或多个节点。这些新节点有关于邻居链接的信息,但通常没有关于属性的信息(它们可能不在属性数据集中)。

new_df = pd.DataFrame({
    'Node': ['A','D', 'X', 'X', 'Z', 'Z'],
    'Edge': ['B', 'B', 'N', 'N', 'A', 'F']
})

能否向我解释一下如何将这些新节点添加到我现有的网络中?如果它们在 attributes_df 中,它们也应该相应地着色。否则,它们应该是黑色的。

G.add_edges_from() 方法要求不像 nx.from_pandas_edgelist() 那样支持“双列”格式。因此,您只需要通过 zip 将列合并在一起来重塑 new_df 数据。

然后再次调用你定义的colour_map填充黑色值,再次设置节点属性,最后绘制。

G.add_edges_from(zip(new_df.Node, new_df.Edge))

colour_map = attributes_df.set_index('Node')['Attribute'].map(mapper).reindex(G.nodes(), fill_value='black')

nx.set_node_attributes(G, colour_map, name="colour")
nx.draw(G, 
        node_color=nx.get_node_attributes(G, 'colour').values(),
        with_labels=True)