2015-07-21 33 views
0
  1. 嗨我很新的網絡,我一直在試圖編寫一個代碼,獲取一個文件夾的所有.edges和.nodes文件,並生成一個graphml文件,以便我可以在另一個軟件中可視化它。但我也需要在節點中添加一些顏色,但是當我嘗試它時,我得到:KeyError 29
  2. 我正在通過節點陣列運行循環以添加每個節點的顏色。
  3. 以下是我嘗試添加顏色屬性的代碼部分。因此,節點將使用4種不同的顏色進行着色:最佳健身,更差,最佳健身10%和差10%。如何使用networkx導出網絡和graphml中的屬性?

    for i in range(len(nodes)): 
        if nodes[i]==top: 
        NetGraph.node[i]['color']='r' 
    
  4. 希望你能幫助我!乾杯

+0

這個問題解決了嗎?你有沒有發現迴應有幫助? –

回答

2

如果你正在嘗試「合併」存儲在多個不同的.nodes' and .edges'文件到一個圖形的關係數據,那麼它有可能是因爲文件是從磁盤讀取你來跨越尚未添加到圖形的節點。

總的來說,我覺得需要更多的信息才能爲這個問題提供更有意義的答案。例如:.node.edge文件的格式是什麼?什麼是top變量? (這是一個列表或單個數字變量代表一個閾值?)。

然而,基於什麼在這個問題到目前爲止提到,這裏有幾個要點:

  1. 首先嚐試建立圖,後來顏色故。如果你已經有了健身數據,這可能會讓你感覺不舒服,但這將是最簡單的方法,讓你得到一段代碼。

  2. 確保您的節點ID確實是整數。也就是說,每個節點在圖中都以其索引值而爲人所知。例如2,3,5等,而不是「巴黎」,「倫敦」,「柏林」等(即字符串節點ID)。如果是後者,那麼for會更好地形成爲:for aNode in G.nodes(data = True):。這將返回一個迭代器,每個節點的ID和一個包含所有現有節點數據的字典。

  3. 如果top是一個變量,那麼它是沒有意義的節點的ID與top閾值進行比較。這就像是說22(這是一個節點ID)是否等於89(這是一些效率的表達),然後將紅色應用到節點。 如果top是一個列表,其中包含所有節點被認爲是頂部節點,則條件表達式應該是:if nodes[i] in top:

    1. 您似乎在if(?)下跳過縮進。對於條件爲True的語句將顏色分配給節點,則需要向右縮進一組4個空格。

    2. 用於分配顏色的表達式是正確的。

    3. 請注意,Networkx會嘗試將它在Graph中遇到的每個節點和邊緣屬性寫入適當的格式。欲瞭解更多信息,請參閱對這個問題的迴應。因此,一旦您對給定圖形(G)的結構感到滿意,就可以簡單地調用networkx.write_graphml(G, 'mygraph.gml')將其保存到磁盤(其中networkx是模塊的名稱)。如果數據類型無法正確序列化,則函數會將圖的完整版本(G)導出爲多種不同的格式,或者引發異常。

我希望這有助於。如果稍後提供更多詳細信息,則很樂意迴應。

相關問題