我正在使用Linkurious的sigma.parsers.cypher.js插件,它似乎通过毫无想象力地分配x和y坐标的随机值将节点放置在视口上,这基本上会造成不可读的混乱--内置在Neo服务器中的图形生成工作做得更好。
考虑到这一点,一种更好地布局东西的算法可以这样工作:
但我想知道有什么可以利用的吗,这样我就不必从头开始编写功能了吗?
*更新I *
可能2)选择所有(无子女)直接相关的节点.带孩子的子节点的位置应该是兄弟姐妹节点直径的两倍(这给孩子们留出空间)
*更新II *
如果圆的半径是{最小距离},并且有更多的无子节点,那么我们可以这样做: 1)增加半径直到所有节点都适合,或者2)创建第二层。
发布于 2015-07-11 15:22:51
因此,对于图形布局,很多人使用d3力定向布局或一些经过调整的相同变体。我不确定neo4j浏览器是否使用d3,但是那里的图形显示看起来像是一个指向我的力的变体。
图形可视化是一个很深的话题,还有很多。要查看什么是可能的样本,请仔细阅读d3画廊。
编辑虽然我对sigma.js不太熟悉,但我认为在西格玛地区,相当于forceAtlas2。
我不能对您的具体算法发表评论;听起来可能是合理的,但对我来说,真正的问题是,“如何利用您正在处理的数据的语义,以便提供一个合理的布局”?例如,我处理大量基于时间的图形数据。所以我们使用有力导向的布局,但不是以同心圆显示东西,中心是连接良好的东西,其他东西是向外推的,我们倾向于把东西与数据的时间方面一起向左向右流动。这对我们来说是可行的,因为我们知道所有节点中的时间戳属性是什么,而且我们知道在这个域中,时间元素是非常有意义的。
如果你有地理数据的话,那么直接使用武力可能是个坏主意,你宁愿在地图上画一些东西。如果你有社交网络数据,也许你会想把它聚集在像Lady这样的“超级节点”周围,以显示谁在网络中最受欢迎。
这一切的关键在于它取决于。如果不了解数据和底层领域的语义,很难判断您的可视化想法是否有用。我认为力导向布局是一个合理的默认开始,然后定制。他们并没有真正定制到任何特定的领域,这使他们有点-似乎是好的,但不是真正伟大的任何事情。
但归根结底,有大量的javascript框架将为您实现十几种不同的算法。最好是从d3或类似的起点进行调整,我根本不建议自己实现所选择的算法,而是将其作为对现有布局引擎的一组配置调整。
https://stackoverflow.com/questions/31351541
复制相似问题