来自 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你想要的图表。
我需要有关 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你想要的图表。