【问题标题】:Constrained d3.js Force display约束 d3.js 强制显示
【发布时间】:2013-12-17 13:30:02
【问题描述】:

我想用力布局做一些与众不同的事情(用于可视化图表)。星座和所有的东西看起来都很有趣,但对于时间序列数据,它并没有那么有用。我希望能够通过某个轴来约束布局,例如,通过根据节点出现在数据集中的时间来布局节点,同时仍然保留可视化的“弹性”。这可以使用 d3 吗?

【问题讨论】:

标签: graph d3.js timeline force-layout


【解决方案1】:

要详细说明我的评论,是的,这是完全可能的。力布局实际上并不定位节点本身,它只是计算位置。在tick 事件的处理程序中,您通常会提供负责定位的函数。在那里,您可以添加限制节点移动方式的任意约束。

采用stock examples 之一,您可以执行以下操作以将x 坐标限制在预期位置的+-10 范围内,并且y 不受限制。

force.on("tick", function() {
  node.each(function(d) {
    var intended = scale(d.value);
    d.x = d.px = Math.min(intended + 10, Math.max(intended - 10, d.px));
  });
  node.attr("cx", function(d) { return d.x; })
      .attr("cy", function(d) { return d.y; });
});

这是另一个example,它使用强制布局来定位标签。在那里,x 位置被忽略(即常量),只有 y 受布局影响。

【讨论】:

  • 谢谢你,拉斯!请问,在我的情况下,var intended = scale(d.value) 应该被 var xpos = scale(d.date) 替换,其中 datetime 是我希望放在我的 x 轴上的值?
  • 你还没有发布任何代码,所以我不知道你的变量叫什么,但是是的,这将指定 x 位置。
  • 谢谢拉尔斯!在修复了我的代码中的一些其他错误之后,我才能够对其进行测试,并且它可以暂时工作!现在修改秤以确保其正常工作。 :-) 再次感谢!
【解决方案2】:

Webcola 是使用 D3.JS 创建基于约束的布局的绝佳工具。

https://github.com/tgdwyer/WebCola

【讨论】:

猜你喜欢
  • 2013-02-12
  • 2014-11-09
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2017-08-27
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多