vis.js 数小时后图表仍未稳定
vis.js graph not stabilizing even after hours
我有一个大约有 1000 个节点的网络。我设置了 stabilize:true
和 zoomExtentOnStabilize: 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 中,我还改变了你的边缘并改变了物理以使其稳定。不满意可以多玩玩
我有一个大约有 1000 个节点的网络。我设置了 stabilize:true
和 zoomExtentOnStabilize: 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 中,我还改变了你的边缘并改变了物理以使其稳定。不满意可以多玩玩