【问题标题】:Specify minimum distance between nodes in infoVis JIT graph指定 infoVis JIT 图中节点之间的最小距离
【发布时间】:2013-03-31 17:42:26
【问题描述】:

有没有什么方法可以在力有向图中指定节点/边之间的最小距离?

我有一些图表,其中一个节点直接连接到数百个其他节点,在这种情况下,很难选择特定的边或节点,因为边和节点非常接近,以至于 onMouseEnter 、 onClick 等事件不是以用户期望的方式触发。

例如如果 nodeA 和 nodeB 真的很接近,当我将 nodeA 悬停并期望它突出显示时, nodeB 会突出显示,因为为 nodeB 触发了事件。当它们彼此太靠近时,边缘的情况也是如此。基本上,用户很难知道究竟是哪个节点/边缘被悬停或选择。

我知道我们可以指定边长。这可以在一定程度上解决这个问题,但是当你有数百个节点和边时它就无济于事了。而且我不能将边缘长度设置为超过画布的高度。

如果我们可以指定节点/边之间的最小距离,那将非常有用。

有人知道怎么做吗?

【问题讨论】:

  • 请展示您如何定义和呈现图表。否则它几乎是在猜测。

标签: javascript canvas graph-visualization infovis thejit


【解决方案1】:

作为InfoVis/TheJit API Documentation,有一个.eachNode() 函数允许您遍历所有节点并检索它们的数据。

$jit.Graph.Util.eachNode( graph, function( node ) {  
   console.log( node );
} );  
// or:
graph.eachNode( function( node ) {  
    console.log( node );
} );

由于我已经一年多没有使用 InfoVis/TheJit 并且目前没有建立项目,我不知道您是否可以通过 Graph.Node.getPos() 检索该职位。无论如何,如果你想出了这一步,你就必须写一个对象/数组/矩阵来保持这个位置。如果某个 el 靠近另一个 el,您可以使用 Graph.Node.setPos() 重新定位它。

【讨论】:

  • 这是个好主意。也许我会尝试一下。但我正在从 infovis API 中寻找可以做到这一点的东西。我不想自己进入设置节点的位置。
  • @PratikPatel 实际上这 API 提供的。如果我没记错的话,它使用px 值,所以应该不会太难。我认为“没那么容易”的唯一事情是它背后的所有实际数学,因为每个节点都必须考虑彼此的节点 x/y vals。至少Graph.Node.getPos() 提供了构建数组所需的所有工具,您可以在其中进行数学运算。
  • 你的建议似乎是唯一的选择。
猜你喜欢
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 2021-10-24
  • 2012-07-17
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多