2017-09-04 37 views
1

我想繪製一個問題「Collat​​z猜想」的數字,它在數字(節點標籤)之間形成一個很好的網絡。然而,使用networkx nx.spring_layout(G)該溶液的最終情節在我得到重疊邊緣和節點: enter image description here enter image description here防止用NetwrokX/Matplotlib重疊邊緣和節點

的nx.spring_layout被配置(通過試驗和錯誤)爲:

pos=nx.spring_layout(G,k = 0.004, iterations = 500, scale = 0.6) 
nx.draw(G, labels=labels, pos=pos, font_size = 6, alpha = 0.5, node_size = nodes.values()) 
plt.show() 

是否有考慮到繪圖窗口中有足夠的空白空間,一種防止這種重疊的特殊方法?在這種情況下,節點大小取決於以下值:len(G.neighbors(node)) 沒有節點具有多於3個鄰居並且最大節點大小被限制在300以進一步防止重疊。 奇怪的是,對於較長的分支,這似乎處理得相當好,但對於像圖像中的[24,12,6,3,10]這樣的分支,它不能足夠地劃分該分支,在其他情況下它完全重疊。請告知我是否應該使用nx.spring_layout(G)之外的其他佈局,這可能會更好地處理此問題。

+0

'graphviz_layout'通常會做最好的工作。 ('from networkx.drawing.nx_agraph import graphviz_layout'。) – DyZ

回答

0

接受DYZ對使用graphviz_layout()的真正有用的評論,我想我會在這裏分享我的經驗,以防其他人有類似的問題,因爲設置這個並不是完全簡單的(對我來說,至少在Ubuntu 16.04上):

我發現sudo pip install pygraphviz沒有工作,因爲它找不到它需要的文件之一。然後我嘗試sudo apt-get install graphviz libgraphviz-dev pkg-config,然後sudo pip install pygraphviz(感謝this suggestion),其中看起來像它的工作(即安裝成功),但我仍然無法通過NetworkX使用graphviz_layout()。所以,我卸載pygraphvizsudo pip uninstall pygraphviz),然後再次安裝它,如下所示(感謝上this thread小費):

sudo pip install pygraphviz --install-option="--include-path=/usr/include/graphviz" --install-option="--library-path=/usr/lib/graphviz/"

工作,並與graphviz_layout()可視化似乎有小於節點重疊使用NetworkX的spring_layout(),以及在邊緣長度和羣集間距方面更令人滿意的方法。