jov*_*cbg 2 python dictionary graph networkx
我需要帮助netX或python中的任何其他图形库.我有字典和键,每个键有几个值:
{nan: array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
'BBDD': array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
'AAAD': array(['BBDD', nan, nan, nan, nan, nan, nan], dtype=object),
'AAFF': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
'MMCC': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
'KKLL': array(['AAFF', 'MMCC', 'AAAD', 'BBDD', nan, nan, nan], dtype=object),
'GGHH': array(['KKLL', 'NI4146', 'MMCC', nan, nan, nan, nan],dtype=object), ...}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如何将这个数据中的数据放到图形中,其中键是节点,值是边.通过dict迭代哪种方式最好?
import networkx as nx
import matplotlib.pyplot as plt
g = nx.DiGraph()
g.add_nodes_from([1,2,3,4,5])
g.add_edge(1,2)
g.add_edge(4,2)
g.add_edge(3,5)
g.add_edge(2,3)
g.add_edge(5,4)
nx.draw(g,with_labels=True)
plt.draw()
plt.show()
Run Code Online (Sandbox Code Playgroud)
它应该是这样的,但与其他数据
Crn*_*Wes 15
实际上,Graph 可以简单地由字典初始化。在这种情况下:
g = nx.DiGraph(d)
Run Code Online (Sandbox Code Playgroud)
将返回您想要的图形。
假设你开始
d = {nan: array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
'BBDD': array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
'AAAD': array(['BBDD', nan, nan, nan, nan, nan, nan], dtype=object),
'AAFF': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
'MMCC': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
'KKLL': array(['AAFF', 'MMCC', 'AAAD', 'BBDD', nan, nan, nan], dtype=object)}
Run Code Online (Sandbox Code Playgroud)
然后你可以add_nodes_from像这样使用:
g = nx.DiGraph()
g.add_nodes_from(d.keys())
Run Code Online (Sandbox Code Playgroud)
和add_edges_from这样:
for k, v in d.items():
g.add_edges_from(([(k, t) for t in v]))
Run Code Online (Sandbox Code Playgroud)
请注意,不需要假设节点是整数.
在此之后,您可以看到:
>>> g.edges()
[(nan, nan),
('AAAD', 'BBDD'),
('AAAD', nan),
('MMCC', nan),
('MMCC', 'AAAD'),
('BBDD', nan),
('KKLL', 'BBDD'),
('KKLL', nan),
('KKLL', 'AAFF'),
('KKLL', 'AAAD'),
('KKLL', 'MMCC'),
('AAFF', nan),
('AAFF', 'AAAD')]
?
Run Code Online (Sandbox Code Playgroud)