1

私はd3.boxd3.bulletをいじっています。どちらの場合も、現在のスケールは次のようなものを使用して取得されます...

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

...x1現在のスケール オブジェクトはどこにありますか。このイディオムがボックス プロットまたはブレット チャートを更新するために使用されていることは理解していますが、その方法を説明できる人はいますか? とはどういうthis.__chart__意味ですか? 天秤のオブジェ?なぜ条件付き?( )のドメインが 0 から無限大までの範囲をカバーするの||はなぜですか?x0

私の質問が不十分に指定されている場合はお詫び申し上げます。どんな助けでも大歓迎です。

4

1 に答える 1

1

コンテキストは、チャートを含む DOM 要素、thisつまりg要素です。変数を DOM 要素にバインドすると、たとえばthis.myvar = state、チャート固有の状態を処理する方法が提供されます。1 つの特定のチャート g 要素に対する複数の update 呼び出しは、すべて同じ変数にアクセスできます。

Mike と Jason は、チャート固有の状態を追跡するために__chart__、さまざまなチャートやd3 軸コンポーネントでもプロパティ名を使用しています。

この場合、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())ます。短絡評価を参照してください。

スムーズな移行には古いスケールが必要です。新しいデータ ポイントが入力されたら、まず古いスケールを使用してグラフにプロットします。その後、新しいスケールに従ってすべてのポイント (新規および更新済み) を移行します。

[0, Infinity] ドメインについて。したがって、このドメインのスケールは、チャートが作成されたばかりの場合にのみ使用されます。つまり、チャートを導入するときに初期遷移を設定する方法を提供します。有限範囲の無限ドメインは、すべてのポイントが 0 にスケーリングされることを意味します。したがって、チャートが設定されると、すべてのポイントが 0 にプロットされ、x1 スケールに従って適切な値に移行します。

于 2012-12-15T06:27:41.467 に答える