从networkx中的文件读取具有pos属性的节点

son*_*oni 2 python networkx

我是Networkx的新手.我有一个包含以下格式的节点位置的文件

0 : 23.23 12.23

其中0是一个节点,23.2312.23分别是X和Y坐标.有谁知道如何读取具有pos属性的节点,使用类似read_edgelist(...)或类似的功能?

谢谢

eri*_*mjl 5

read_edgelist,您假设您已经存在边缘列表.但是,您提供的是节点+属性.

由于您从一个具有文件格式的文件开始(在您的评论中说明),因此第一个挑战是将其转换为易于解析的格式.出于这个原因,我建议使用CSV文件格式.要对您的文件执行此操作,我会将终端(Linux和Mac)启动cd到包含您的文件的目录中,然后运行以下两个命令:

sed -n 's/ : /,/gpw nodes_replaced1.txt' nodes.txt
Run Code Online (Sandbox Code Playgroud)

这将读取nodes.txt(或您的文件),替换所有出现的:(包括空格),,并将其保存为nodes_replaced1.txt.您可以随意更改文件名.

完成后,在终端中运行以下命令

sed -n 's/ /,/gwp nodes.csv' nodes_replaced1.txt
Run Code Online (Sandbox Code Playgroud)

这将做类似的事情,除了在nodes_replaced1.txt中读取,替换[spaces],,并将其写为CSV文件.

获得CSV文件后,我建议您使用Pandas打开CSV文件,然后执行以下操作将节点添加到图表中:

In [1]: import pandas as pd

In [2]: import networkx as nx

In [5]: nodes = pd.read_csv('nodes.csv', header=None)

In [6]: nodes
Out[6]: 
   0      1      2
0  0  52.88  52.53
1  1  56.63  49.53
2  2  38.60  69.81
3  3  43.00   2.88

In [7]: G = nx.Graph()

In [8]: G
Out[8]: <networkx.classes.graph.Graph at 0x105e94cd0>

In [9]: for row in nodes.iterrows():
   ...:     G.add_node(row[1][0], x=row[1][1], y=row[1][2])
   ...: 

In [10]: G.nodes(data=True)
Out[10]: 
[(0.0, {'x': 52.880000000000003, 'y': 52.530000000000001}),
 (1.0, {'x': 56.630000000000003, 'y': 49.530000000000001}),
 (2.0, {'x': 38.600000000000001, 'y': 69.810000000000002}),
 (3.0, {'x': 43.0, 'y': 2.8799999999999999})]
Run Code Online (Sandbox Code Playgroud)

你会注意到,当我G.nodes()只打电话时,没有x和y位置数据.但是,当我打电话时G.nodes(data=True),x和y位置数据被合并.

有关如何创建图形以及如何输入与任何节点,边缘或图形相关联的"属性"的更多信息,请参阅此页面:http://networkx.github.io/documentation/latest/tutorial/tutorial. HTML#节点

最后,如果@Aric出现回答这个问题,请纠正我,如果我错了!