2015-07-10 70 views
1

我與sigma.parsers.cypher.js插件Linkurious,這似乎奠定了節點通過而unimaginatively分配Xÿ視工作座標,它與足夠的節點基本上創建隨機值一個難以理解的混亂 - 內置於Neo服務器中的圖形生成工作做得更好。尋找一個佈局算法

在考慮這個問題,算法打下的東西了更好的工作,可能是這樣的:

  1. 選擇在(0,0)
  2. 圖中的位置和它的第一個節點選擇都直接相關節點和它們定位一個{最小 距離}從父節點遠離
  3. 如果任何兩個兄妹比{最小距離}近,從父增加的距離,直到所述同級可充分地分離
  4. 爲每個同級執行小號teps 2 & 3以上

但我想知道有什麼我可以利用,所以我不必從頭開始寫功能?

*更新I *

也許2)選擇全部(無子女)直接相關的節點...然後2A)帶小孩子節點應該位於距離的兩倍+的節點的直徑兄弟姐妹(這使房間爲其子女)

*更新II *

如果圓的半徑是{最小距離}和有比將適合,我們既可以更無子女節點:1)增加半徑直到全部e節點適合,或者2)創建第二層

回答

2

因此對於圖形佈局,很多人使用d3 force directed layout或相同的一些調整變體。我不確定neo4j瀏覽器是否使用d3,但那裏的圖形顯示看起來像是一個強制定向變體。

圖形可視化是一個非常深刻的話題,並且有很多。要查看可能的樣本,請仔細閱讀d3 gallery

編輯雖然我不太熟悉sigma.js,但我認爲在西格瑪土地上相當於forceAtlas2

我不能評論你的具體算法;聽起來這可能是合理的,但對我來說,真正的問題是,「你如何利用你正在處理的數據的語義,以便呈現合理的佈局」?例如,我處理很多基於時間的圖形數據。因此,我們使用強制導向佈局,而不是在同心圓中顯示事物,在中心連接良好的東西以及向外推動其他東西,我們傾向於將事情放在左邊,並與數據的時間方面一起向右流動。這對我們很有用,因爲我們知道所有節點中的timestamp屬性是什麼,並且我們知道在該域中,時間元素非常有意義。

如果你有地理數據,那麼可能是強制指導是一個壞主意,你寧願在地圖上繪製東西。如果你有社交網絡數據,也許你想把它放在像Lady Gaga這樣的「超級節點」周圍,以顯示網絡中最受歡迎的人。

所有這一切的關鍵是它取決於。如果不理解數據和底層域的語義,很難說您的可視化想法是否有用。我認爲強制指導佈局作爲合理的默認開始,然後自定義。它們並不是真的被定製到任何特定的領域,這使得它們對於大多數事物來說都不錯,但對於任何事情都不是很好。

但底線,有一堆JavaScript框架,將爲您實現一打不同的算法。您最好從d3或類似的起點開始調整,我根本不推薦自己實現您選擇的算法,而是將它作爲一組配置調整到現有的佈局引擎。

+0

我看着forceAtlas2。它似乎找到了連接數最多的節點,並以明星模式將它們拉出,將其他所有內容都集中在中心。這創造了非常長的邊緣,並且仍然非常混亂。你知道Neo4j在內置服務器中使用哪種算法嗎?這很漂亮 – ekkis