从文件中读取nodelist值绘制NetworkX的grid_2d_graph

1 投票
1 回答
1627 浏览
提问于 2025-04-17 07:39

我想用文件中的节点列表来绘制一个二维网格图。

list1 = [(0,0),(0,1),(1,0)] 
nx.draw_networkx_nodes(G, pos, nodelist=list1, node_color='b')

在上面的说法中,我不想手动设置节点列表,而是想从一个文件中读取节点列表。这个文件会包含应该被涂成蓝色的节点列表。

我尝试从文件中读取数据,并把获取到的值放到节点列表里,但出现了错误,提示节点 '(0,1)' 没有位置,可能是因为我把它存储成了字符串。

有没有人能建议一下,怎么从文件中读取节点列表的值呢?

1 个回答

0

这里有一种方法,可以把节点的颜色作为节点的属性存储,并将它们保存在一个GraphML格式的文件中。然后,你可以读取这个文件,把节点和属性提取成列表,以便传递给nx.draw()(或者nx.draw_networkx_nodes())来绘制图形。

import matplotlib.pyplot as plt
import networkx as nx
# create graph 
G=nx.Graph()
# with nodes that have attribute "color"
G.add_nodes_from('abc',color='r')
G.add_nodes_from('de',color='b')
G.add_edges_from([('a','b'),('b','d'),('c','e'),('b','e')])
# save/load in graphml format
nx.write_graphml(G,'color_test.graphml')
H=nx.read_graphml('color_test.graphml')
# get nodes and colors as lists from graph attributes
nodes,colors=zip(*nx.get_node_attributes(H,'color').items())
nx.draw(H,nodelist=nodes,node_color=colors)
plt.show()

撰写回答