2017-06-14 49 views
1

我需要幫助networkX或Python中的任何其他圖形庫。 我有字典,鍵和每個鍵的幾個值:來自python字典的圖表networkx x

{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), ...} 

現在的問題是,我怎麼可以把數據從本字典來圖,其中鍵是節點和值將邊緣。哪種方法最適合迭代字典?

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() 

應該是這樣的,但與其他數據

+0

爲什麼你有字符串數組numpy的,而不是使用字符串的常規列表的? –

+0

我真的不確定你在說什麼,我是一個初學者。但我想你的想法是,那是因爲我得到了第一個數據框,然後我將數據框轉換爲字典。 @IgnacioVergaraKausel – jovicbg

回答

1

假設你開始了與

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

​ 
+0

謝謝,男人......非常。 :) – jovicbg

+0

@jovicbg沒問題。祝一切順利。 –