最初: D3バージョン:"version": "3.5.17"
強制的なグラフ再利用の失敗?
iはその近くに主題二differnetの種類、比例シンボルマップとシンボル(比例シンボルと同じ円)と擬似デマーズの統計地図を有しますできるだけ原点を衝突の検出と重力で検出します。
しかし、比例記号マップから円を動かしたいです。特に、私はちょうど衝突検出と重力のために私の力に向けられたグラフをトリガーしたいです。これは最初に正常に動作します。私はカートングラムから比例記号マップに戻るアニメーションを提供します。ここで各シンボルは重心に戻って移動します。今、もし私がカートログに戻ってほしいのであれば、コードは失敗し、Uncaught TypeError: Cannot read property '1' of undefined
と書かれています。これは、力の再利用性に何らかのバグですか?私の側に何らかのエラーがありますか?
ここで問題をテストすることができます:https://particles-masterthesis.github.io/aggregation/;左上に、比例記号とカートグラフィックを切り替えることができます。
iを使用している適切なコードは以下の通り: キー部iが統計地図と統計地図に比例シンボルマップ
間で同じオブジェクトを共有information
オブジェクトである case 'psm_cartogram': let psm = this.currentViz; information = { data: psm.nodes, symbols: psm.symbols }; upcomingViz.obj = this.canvas.drawCartogram( null, this.currentViz.constructor.name === "Cartogram", information, () => { this.currentViz.hide(false, true); this.fadeOutParticles(); } ); upcomingViz.type = 'cartogram'; resolve(upcomingViz); break;
` this.force = this.baseMap._d3.layout.force() .charge(0) .gravity(0) :、私は、次の重要なコードを有します.size([this.width - this.symbolPadding、this.height - this.symbolPadding]);
this.nodes = keepInformation.data;
this.node = keepInformation.symbols;
this.force
.nodes(this.nodes)
.on("tick", this.tick.bind(this, 0.0099))
.start();
...
tick(gravity) {
this.node
.each(this.gravity(gravity))
.each(this.collide(0.25))
.attr("cx", d => { return d.x; })
.attr("cy", d => { return d.y; });
}
gravity(k) {
return d => {
d.x += (d.x0 - d.x) * k;
d.y += (d.y0 - d.y) * k;
};
}
//the collide function is not shown as it is a simple quadtree
`
それはどのような方法で役立つ場合、コードも利用可能である3210でメインコードは、遷移マネージャと二種類あります地図の
私がチェックアウトできるシンプルなヒントであっても、私が得ることができる提案やサポートには感謝しています。
PS:
これらの2つのスクリーンショットです。最初のものはcartogram:132
の異なるログに対して重要であり、重力などを実行する前にtick
関数の中でconsole.log(this.node)
であった。第2のものはエラーを言及している。
最初のログの詳細については、 tick機能でthis.node
を記録することから開始します。その後、psmの視覚化の変更がトリガーされ(cartogram_psm
)、後でカートログに戻ってエラーが表示されました。