5

我有一个大约 1000 个节点的网络。我已经设置stabilize:truezoomExtentOnStabilize: true. 正在通过JSON使用vis.network.gephiParser.parseGephi()功能添加节点。当我试图绘制这张图时,即使闲置了几个小时,它也永远不会稳定下来。但随后少量节点会在合理的时间内稳定下来。我在这里想念什么。有什么办法可以稳定大图。我什至尝试将迭代次数设置为稳定到 1000 甚至更高。在此先感谢您的帮助。

PS:节点的坐标不能从 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();
4

1 回答 1

11

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

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

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

〜亚历克斯

编辑:

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

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

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

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

编辑2:

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

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

因此,如果您认为它在某种意义上不稳定,即它不会隐藏自己并且仅在准备好时显示而不是永远不会达到稳定状态,那么问题是稳定仅通过 setData() 完成,而不是通过数据集更新。

在这个 jsbin 中,我还更改了您的边缘并更改了物理特性以使其稳定。如果你对它不满意,你可以多玩一点。

于 2015-05-06T08:22:35.597 回答