首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找布局算法

寻找布局算法
EN

Stack Overflow用户
提问于 2015-07-10 22:57:44
回答 1查看 687关注 0票数 1

我正在使用Linkurious的sigma.parsers.cypher.js插件,它似乎通过毫无想象力地分配x和y坐标的随机值将节点放置在视口上,这基本上会造成不可读的混乱--内置在Neo服务器中的图形生成工作做得更好。

考虑到这一点,一种更好地布局东西的算法可以这样工作:

  1. 选择图中的第一个节点并将其定位为(0,0)
  2. 选择所有直接相关的节点,并将它们与父节点相距{最小距离}。
  3. 如果任何两个兄弟姐妹都比{最小距离}更近,请增加与父兄弟姐妹的距离,直到兄弟姐妹能够充分分开为止。
  4. 对于每个兄弟执行上面的步骤2和3

但我想知道有什么可以利用的吗,这样我就不必从头开始编写功能了吗?

*更新I *

可能2)选择所有(无子女)直接相关的节点.带孩子的子节点的位置应该是兄弟姐妹节点直径的两倍(这给孩子们留出空间)

*更新II *

如果圆的半径是{最小距离},并且有更多的无子节点,那么我们可以这样做: 1)增加半径直到所有节点都适合,或者2)创建第二层。

EN

回答 1

Stack Overflow用户

发布于 2015-07-11 15:22:51

因此,对于图形布局,很多人使用d3力定向布局或一些经过调整的相同变体。我不确定neo4j浏览器是否使用d3,但是那里的图形显示看起来像是一个指向我的力的变体。

图形可视化是一个很深的话题,还有很多。要查看什么是可能的样本,请仔细阅读d3画廊

编辑虽然我对sigma.js不太熟悉,但我认为在西格玛地区,相当于forceAtlas2

我不能对您的具体算法发表评论;听起来可能是合理的,但对我来说,真正的问题是,“如何利用您正在处理的数据的语义,以便提供一个合理的布局”?例如,我处理大量基于时间的图形数据。所以我们使用有力导向的布局,但不是以同心圆显示东西,中心是连接良好的东西,其他东西是向外推的,我们倾向于把东西与数据的时间方面一起向左向右流动。这对我们来说是可行的,因为我们知道所有节点中的时间戳属性是什么,而且我们知道在这个域中,时间元素是非常有意义的。

如果你有地理数据的话,那么直接使用武力可能是个坏主意,你宁愿在地图上画一些东西。如果你有社交网络数据,也许你会想把它聚集在像Lady这样的“超级节点”周围,以显示谁在网络中最受欢迎。

这一切的关键在于它取决于。如果不了解数据和底层领域的语义,很难判断您的可视化想法是否有用。我认为力导向布局是一个合理的默认开始,然后定制。他们并没有真正定制到任何特定的领域,这使他们有点-似乎是好的,但不是真正伟大的任何事情。

但归根结底,有大量的javascript框架将为您实现十几种不同的算法。最好是从d3或类似的起点进行调整,我根本不建议自己实现所选择的算法,而是将其作为对现有布局引擎的一组配置调整。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31351541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档