2015-07-10 72 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