这个.__ chart__在d3选择中引用了什么?

时间:2012-12-14 21:36:36

标签: d3.js

我一直在寻找d3.boxd3.bullet。在这两种情况下,使用以下内容检索当前比例...

var x0 = this.__chart__ || d3.scale.linear()
  .domain([0, Infinity])
  .range(x1.range());

...其中x1是当前的比例对象。我意识到这个习惯用于更新箱形图或子弹图,但任何人都可以解释如何? this.__chart__指的是什么?一个尺度对象?为什么有条件? (||)当当前比例不太可能具有如此大的范围时,为什么x0的域覆盖范围0到无穷大?

如果我的问题没有明确指出,请道歉。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

this上下文是包含图表的DOM元素:即g元素。将一些变量绑定到DOM元素,例如this.myvar = state,提供了一种处理图表特定状态的方法。对一个特定图表g元素进行多次更新调用,然后都可以访问同一个变量。

Mike和Jason在各种图表和d3 axis component中使用了属性名__chart__,用于跟踪图表特定的状态。

你是对的,在这种情况下,它是存储在g元素的__chart__属性中的比例。参见bullet.js的摘录:

  // Compute the new x-scale.
  var x1 = d3.scale.linear()
      .domain([0, Math.max(rangez[0], markerz[0], measurez[0])])
      .range(reverse ? [width, 0] : [0, width]);

  // Retrieve the old x-scale, if this is an update.
  var x0 = this.__chart__ || d3.scale.linear()
      .domain([0, Infinity])
      .range(x1.range());

  // Stash the new scale.
  this.__chart__ = x1;

因此,根据当前数据确定比例x1。它将存储在__chart__中,以便在将来使用新数据更新此图表时使用。

之前的比例来自this.__chart__并保留在x0。正在构建图表时(即进入阶段),this.__chart__将返回undefined。在这种情况下,x0将成为d3.scale.linear().domain([0, Infinity]).range(x1.range())。请参阅short circuit eval

平稳过渡需要旧规模。输入新数据点时,我们首先要使用旧比例在图表上绘制它们。之后,我们将根据新的比例转换所有点(新的和更新的)。

关于[0,Infinity]域。因此,只有在构建图表时才会使用具有此域的比例。这意味着它提供了一种在引入图表时设置初始转换的方法。具有有限范围的无限域意味着所有点都缩放为0.因此,当设置图表时,所有点都将绘制为0并根据x1比例转换为适当的值。