2012-08-01 79 views
0

蛇皮networkx模塊具有用於合併兩個網絡圖的方法nx.union合併在networkx兩個網絡地圖。它通過編號查找所有節點,併合並具有相同編號的節點。存儲在GEXF格式節點通過獨特標籤

例子:

<node id="0" label="walking"> 
    <ns0:color b="200" g="11" r="11" /> 
    <attvalues> 
     <attvalue for="0" value="2" /> 
     <attvalue for="1" value="26" /> 
    </attvalues> 
    </node> 

這對我來說是一個問題,因爲我的地圖在每個節點屬性任意節點的數字,但獨特的標籤。當我分配節點號時,我只是查看列表並使用列表索引作爲節點號,但map1可能在84位置有「步行」,而map2可能在157位置有「步行」 - 因此節點號不容易涉及節點標籤。

有誰知道我應該如何聯合使用networkx的網絡地圖,並指定節點標籤名稱的匹配?

我可能不得不寫我自己的方法,但只是想確保我沒有失去一些東西。有一個union_disjoint(),但似乎在同一個文件中創建兩個單獨的未連接的地圖,這沒有幫助。

也是第二個networkx問題:有沒有一種方法來指定GEXF文件格式中的節點標籤大小和標籤顏色?未列入GEXF v1.2草案規範。

+0

根據[該文檔(http://networkx.lanl.gov/preview/reference/generated/networkx.union.html),'nx.union'假定圖表來是不相交的,因此,如果我解讀正確,它甚至不應該爲你的問題工作。也許['nx.disjoint_union'](http://networkx.lanl.gov/preview/reference/generated/networkx.disjoint_union.html#networkx.disjoint_union)做你想要的? – 2012-08-01 15:24:39

+0

我已經嘗試過disjoint_union - 當你在gephi中編譯和編譯時,會得到兩個完全分離的圖。我知道這是可以完成的,但考慮到數據必須在GEXF中進行結構化的方式,似乎不是微不足道的。當您向節點添加顏色和大小attrib時,它需要id#s作爲節點。 – 2012-08-01 18:17:53

回答

6

嘗試使用nx.read_gexf(file,relabel = True)。這將使用GEXF節點標籤作爲NetworkX節點標識符。然後,可以通過將兩個圖的節點和邊添加到另一個來合併這兩個圖。例如

>>> G = nx.read_gexf(file1, relabel=True) 
>>> H = nx.read_gexf(file2, relabel=True) 
>>> G.add_nodes_from(H.nodes(data=True)) 
>>> G.add_edges_from(H.edges(data=True)) 
+0

謝謝。我會嘗試解決問題並回復您。 – 2012-09-29 23:04:12

+0

我意識到我從來沒有回過頭來回答這個問題。我會在本週嘗試測試它。有沒有其他人試過這個? – 2012-11-19 17:24:17

+4

雖然這個線程很舊,但我可以確認上面的答案(add_nodes/edges_from方法)是正確的。 – 2014-03-11 03:50:35