【问题标题】:vis.js graph not stabilizing even after hoursvis.js 图形即使在数小时后也不稳定
【发布时间】:2018-03-05 06:10:39
【问题描述】:

我有一个由大约 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();

【问题讨论】:

    标签: javascript json vis.js vis.js-network chap-links-library


    【解决方案1】:

    我是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,output

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

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

    【讨论】:

    • 感谢您的回复。我可以附上或向您发送正在绘制的 JSON 代码以及 JavaScript 代码。我正在使用 R 进行 SNA,并且正在使用浏览器中的闪亮框架完成可视化。 JSON 从 R 发送到客户端,然后绘制。我不是解析本地文件,而是解析从服务器发送的 JSON。我希望向您发送完整的代码,但 JSON 太长,无法在此处发布。请指导我发送完整的代码。
    • 代码示例可以使用jsbin。您可以在任何地方托管您的代码,最好是 github。
    • 由于 CORS 错误,我无法从 jsbin.com 的 url 访问 JSON 数据。我在 OP 中附加了 JSON 和 JS 代码。请看一看。
    • 您的控制台有问题吗?
    • 我会将我的追加添加到我的答案中
    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多