jjzjj

javascript - vis.js 图甚至在数小时后仍不稳定

coder 2025-02-22 原文

我有一个大约有 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 中,我还改变了你的边缘并改变了物理以使其稳定。如果您对它不满意,可以多玩玩它。

关于javascript - vis.js 图甚至在数小时后仍不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30045279/

有关javascript - vis.js 图甚至在数小时后仍不稳定的更多相关文章

  1. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  2. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  3. ruby-on-rails - Assets 管道损坏 : Not compiling on the fly css and js files - 2

    我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1

  4. ruby-on-rails - Rails - 理解 application.js 和 application.css - 2

    rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:

  5. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  6. node.js - 如何在 Travis CI 上的一个项目中运行 Node.js 和 Ruby 测试 - 2

    我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每

  7. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

  8. ruby-on-rails - 我将 Rails3 与 tinymce 一起使用。如何呈现用户关闭浏览器javascript然后输入xss? - 2

    我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如

  9. node.js - 从未编写过任何自动化测试,我应该如何开始行为驱动开发? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。多年来,我一直在使用多种语言进行编程,并且认为自己总体上相当擅长。但是,我从未编写过任何自动化测试:没有单元测试,没有TDD,没有BDD,什么都没有。我已经尝试开始为我的项目编写适当的测试套件。我可以看到在进行任何更改后能够自动测试项目中所有代码的理论值(value)。我可以看到像RSpec和Mocha这样的测试框架应该如何使设置和运行所述测试变得相当容易

  10. ruby - 使用 Selenium WebDriver 启用/禁用 javascript - 2

    出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=

随机推荐