コンテキストは、チャートを含む 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 スケールに従って適切な値に移行します。