vis.js 数小时后图表仍未稳定

vis.js graph not stabilizing even after hours

我有一个大约有 1000 个节点的网络。我设置了 stabilize:truezoomExtentOnStabilize: true。使用 vis.network.gephiParser.parseGephi() 函数从 JSON 添加节点。当我尝试绘制此图时,即使在闲置数小时后它也从未稳定下来。但是随后较少数量的节点在合理的时间内稳定下来。我在这里错过了什么。有什么方法可以稳定大图。我什至尝试将迭代次数设置为稳定到 1000 甚至更高。先谢谢您的帮助。

P.S.:JSON 中没有节点的坐标。该图根据用户输入重新绘制。

编辑 1: 正在绘制的 JSON 数据可在 http://pastebin.com/raw.php?i=Mzy4ncxw 获得。由于 CORS 错误,我无法在 jsbin 上制作可重现的示例。
JavaScript代码是:

message = JSON.parse(json_data); // json_data is sent from R server.
var nodes = new vis.DataSet();
var edges = new vis.DataSet();
var container = document.getElementById("div_graph");
var data = {
  nodes: nodes,
  edges: edges
};
var options = {
  tooltip: {
    delay: 50,
    fontColor: "black",
    fontSize: 14, 
    fontFace: "verdana",
    color: {
      border: "#666",
      background: "#FFFFC6"
      } 
  },
  clustering: {
    enabled: clusteringOn,
    clusterEdgeThreshold: 50  
  },
  hideEdgesOnDrag: true,
  stabilize: true,
  zoomExtentOnStabilize: true,
  navigation: true,
  keyboard: true,
  edges: {
    inheritColor: "to"
  }
};
var network = new vis.Network(container, data, options);
nodes.clear();
edges.clear();
var parsed = vis.network.gephiParser.parseGephi(message);
nodes.add(parsed.nodes);
edges.add(parsed.edges);
network.redraw();

我是visjs网络模块的开发者。我们用它来稳定比 1000 个节点大得多的集合。根据您提供的信息,我真的不能说这里出了什么问题。我想邀请您在我们的 github 页面上提出问题。我们试图在那里收集所有问题。你能分享你使用的代码或你的数据吗(当然,为了匿名而加扰的标签)。

如果我猜的话,一个 1000 节点的系统会在大约 3000 次迭代后稳定下来。如果您使用的是动态平滑曲线,则随着添加支撑节点来定位曲线,这会大大增加。我已经为 3000 个节点和 25000 个边缘系统使用了 15000 次迭代,即使到那时它还没有完成,但无论如何我都会在那时停止模拟。

当您说在用户输入时重绘时,数据是在您看到拖动或缩放(类似于重绘功能)的意义上重新加载或重绘吗?

~亚历克斯

编辑:

根据您的数据,我遇到了一些问题。

首先,您似乎不允许节点移动但也不提供它们的位置,导致四叉树构建过程中的无限递归。将来我会让 gephiParser 更健壮。 在这里查看 gephi 解析器的设置:http://visjs.org/docs/network.html#Gephi_import

其次,你使用动态平滑曲线和大量相互连接的节点。每条平滑的曲线都有一个不可见的支撑节点来帮助定位。这会使您的系统不稳定(用 stabilize of 查看它以查看行为)。在 v4 版本中,您可以设置自己的时间步来纠正此问题,但您也可以更改物理设置。试试 configurePhysics 选项,看看是否有帮助。您仍然可以出于美学目的使用静态平滑曲线。

总而言之,我可以让您的系统在大约 3000 次迭代中以静态平滑曲线稳定下来,大约需要一分钟。我在您的选项中禁用了聚类。我建议您等待 4.0 版本使用集群,因为它会更强大。

编辑 2:

这是一个 JSBin,它显示了您的代码和数据的工作稳定性(尽管已修改)

http://jsbin.com/tiwijixoha/5/edit?html,output

因此,如果您认为它不稳定,因为它不会隐藏自己,只在准备就绪时显示,而不是永远不会达到稳定状态,那么问题是稳定只能通过 setData 完成(),而不是数据集更新。

在这个 jsbin 中,我还改变了你的边缘并改变了物理以使其稳定。不满意可以多玩玩