向现有网络添加新节点
Adding new nodes to an existing network
我有一个网络(使用 networkx 构建),它考虑了以下几个方面:
- 具有特定特征的唯一节点列表(
attributes_df
)
- 节点列表及其各自的邻居节点 (
edges_df
)
例如,您可以参考以下内容:
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)
我有一个网络(使用 networkx 构建),它考虑了以下几个方面:
- 具有特定特征的唯一节点列表(
attributes_df
) - 节点列表及其各自的邻居节点 (
edges_df
)
例如,您可以参考以下内容:
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)