来自python dict的图表networkx

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)

将返回您想要的图形。


Ami*_*ory 6

假设你开始

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)