【问题标题】:Plotting huge trees with vis.js用 vis.js 绘制大树
【发布时间】:2018-07-03 18:41:57
【问题描述】:

我正在尝试使用 vis.js 4.21.0 绘制一个相当大的 network(即 ~1k 节点和 ~1k 边)。这是我的选项对象:

var options = {
    autoResize: true,
    height: '400px',
    clickToUse: false,
    layout: {
        hierarchical: {
            direction: 'UD',
            sortMethod: 'directed',
        }
    },
    physics: {
       stabilization: false,
       barnesHut: {
            gravitationalConstant: -80000,
            springConstant: 0.001,
            springLength: 200
       }
    },
    nodes: {
        shape: 'dot',
        size: 20,
        font: {
            size: 15,
            color: '#ffffff'
        },
        borderWidth: 2
    },
    groups: groups,
 };

问题在于渲染最多需要 4 分钟(参见 simplified JSFiddle)。在this example,比我的大得多,网络几乎是瞬间渲染的。

如何加快图表的渲染速度?

【问题讨论】:

  • huger 示例使用选项physics.barnesHut——这会有所不同吗?描述:这是非分层布局的最快、默认和推荐的求解器。
  • 我已经尝试过了,但没有任何区别。 PS:为了完整起见,我在问题中添加了physics 键,
  • 即使我不使用分层布局也会发生同样的情况。

标签: javascript charts vis.js vis.js-network


【解决方案1】:

等等,你的小提琴没有你在帖子中提到的所有选项。例如,网络在几分钟过去之前根本不显示,但如果您添加physics: { stabilization: false },它会立即显示(尽管此时它不是静态的并且会慢慢放松)。此外,在physics 中添加barnesHut: { ... } 并调整springConstant 会改变放松的速度。

但这里有一个棘手的部分:将您拥有的未松弛树(带有 stabilization: false)与 vis.js 4.21.0 和您拥有的 get 与 4.19.1 进行比较!它看起来好多了:

比这个烂摊子:

这是reported earlier,可能值得更多挖掘,但我可以肯定的是 4.19.1 使初始树在放松之前更容易看到东西。有了这个版本,你甚至可以去physcis: false 得到这个:

我会考虑使用这种方法,尽管它有缺点:

物理的版本也有一定的缺陷,所以...

【讨论】:

  • 很好的答案!使用4.19.1时还有其他的缺点吗?
  • @floatingpurr hmm.. 实际上,我现在在 4.18.1 上 :) 不确定我是否需要更新,但也许我应该查看更新日志
  • @floatingpurr 仍然值得在 github 上报告/讨论。推广使用旧版本的 lib 并不是一件好事,由于 vis.js 与维护者有问题,我们应该帮助收集甚至投资问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 2016-11-09
  • 2018-11-18
  • 2017-01-01
相关资源
最近更新 更多