来自 python dict 的图形 networkx

Graph networkx from python dict

我需要有关 networkX 或 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), ...}

现在我的问题是,如何将这个字典中的数据放入图表中,其中键是节点,值是边。哪种方式最适合通过 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()

应该是这样的,但是有其他数据

假设你从

开始
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)}

然后你可以像这样使用add_nodes_from

g = nx.DiGraph()
g.add_nodes_from(d.keys())

add_edges_from像这样:

for k, v in d.items():
    g.add_edges_from(([(k, t) for t in v]))

请注意,没有必要假设节点是整数。

接着你可以看到:

>>> 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')]

​

其实Graph可以简单的用字典来初始化。 在这种情况下:

g = nx.DiGraph(d)

会return你想要的图表。