d3.jsでデータが変更されたときに要素属性の再計算を強制するにはどうすればよいですか?

ジョンドド

D3.jsがどのように機能するかを理解しようとしていますが、いくつかの(おそらく)基本的な原則を理解するのに苦労しています...助けていただければ幸いです。

私が理解していることから、このスニペットはrectSVG要素を作成し、それらの属性を設定します。

var nodes = d3.selectAll('circle.node')
    .data(mydata)
  .enter()
    .append('rect').class('attr', 'node');

// now set some attributes on these SVG elements:
nodes.attr('...', function(d) {
    return '...'; 
});

後でデータが変更されたとき、私はこれを行うだけでよいと思います。

d3.selectAll('circle.node')
    .data(mydata) // doesn't work as I would expect

ただし、上記のスニペットは期待どおりに機能しません。属性を変更したい場合はattr()、属性がデータの関数として指定されていて、それ自体を再計算できるはずですが、選択を呼び出す必要があります。さらに悪いことに、この再計算を強制したい場合は、同一の無名関数を指定する必要があります。

何故ですか?.updateMyAttributesFromData()どういうわけか見逃してい機能はありますか?このようなもの:

d3.selectAll('circle.node')
    .data(mydata)
    .updateMyAttributesFromData(); // not a real function

私は何かが足りないのですか?

-

ちなみに、「重複する質問」マークを避けるために:質問d3jsで基になるデータが変更されたときに要素を更新する方法には有望なタイトルがありますが、残念ながら内容は完全に異なります。:)

Lars Kotthoff

何も見逃していません。これは単にD3の動作方法です。データを更新しても、属性は自動的に更新されません。つまり、新しいデータを割り当てるときに、実際には同じコードを再度実行する必要があります。これは設計上の決定であり、バグではありません。

ただし、これらすべてを実行するコードを、たとえばデータを受け取る関数でラップすることにより、少し簡単に(そして冗長性を少なくして)行うことができます。

function update(data) {
  var sel = d3.selectAll("foo").data(data);

  sel.enter().append("foo");

  // elements added in the enter selection merge into the update selection,
  // so this attribute is set for the elements that have just been added as well
  sel.attr("foo", "bar");

  sel.exit().remove();
}

属性の更新を自動的に行わない理由の1つは(実装の複雑さが増すことは別として)、通常、レンダリング要素がデータ集約型アプリケーションのボトルネックであるためです。これが自動的に発生した場合、実際に何も更新する必要がなくても、常にこのパフォーマンスのオーバーヘッドが発生します。さらに、それは.exit()選択とうまく機能しません(つまり、とにかく削除される要素の属性を更新します)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

モデルがスケーリングされたときに3D法線を再計算するにはどうすればよいですか?

分類Dev

ionic 3でデータが変更されたときに、変数の値を自動的に更新するにはどうすればよいですか?

分類Dev

D3のデータに応じて要素を作成するにはどうすればよいですか?

分類Dev

d3 v5:特定の属性が変更された場合にのみ移行するにはどうすればよいですか?

分類Dev

ドラッグ時にd3でデータが正しく渡されることを確認するにはどうすればよいですか?

分類Dev

データが更新されたときに再利用可能なd3.jsグラフを更新するにはどうすればよいですか?

分類Dev

3D変換された要素のサイズを(遠近法で)計算するにはどうすればよいですか?

分類Dev

d3.jsで、ネストされた選択の対象となるデータバインディングでインデックスi(またはその場所での強制/強制グループインデックスjの使用)を保持するにはどうすればよいですか?

分類Dev

力のレイアウトグラフのデータを動的に変更するにはどうすればよいですか?D3

分類Dev

D3で円グラフの場所を変更するにはどうすればよいですか?

分類Dev

d3で関数linear()の名前を変更するにはどうすればよいですか?

分類Dev

D3とBootstrapを使用してすべてのデータ要素を表示するにはどうすればよいですか?

分類Dev

d3をフィルター処理するときに、グループ化されたグラフの一部を強調表示するにはどうすればよいですか。

分類Dev

d3 jsでルートから選択したノードへのパスを強調表示するにはどうすればよいですか?

分類Dev

d3 v4の要素に保存されているズーム変換をリセット/削除するにはどうすればよいですか?

分類Dev

d3グラフのデータを更新するにはどうすればよいですか?

分類Dev

d3でアニメーション化された軸ラベルの位置を制限するにはどうすればよいですか?

分類Dev

VEGA ApiでD3ツリーデータを使用するにはどうすればよいですか?

分類Dev

D3:データファイルソースを変更してグラフを動的に更新するにはどうすればよいですか?

分類Dev

Matlabで複数年にわたる同じ日のデータの3D行列の平均を計算するにはどうすればよいですか?

分類Dev

d3 要素への参照を機能させるにはどうすればよいですか?

分類Dev

enter()とexit()はD3で更新されたデータをどのように検出しますか?

分類Dev

HTMLデータをd3にマッピングするにはどうすればよいですか?

分類Dev

D3 d3jsを使用して、要素の属性に基づいて「構成された」要素を階層的に追加するにはどうすればよいですか?

分類Dev

d3を使用して作成された最初のdivの兄弟である新しいdiv要素を追加するにはどうすればよいですか?

分類Dev

d3 v4の強制レイアウトで更新が必要なネストされたノードを構築するにはどうすればよいですか?

分類Dev

D3の各データ要素に対して「呼び出し」を実行するにはどうすればよいですか?

分類Dev

データマップとD3で完了したイベントをバインドするときに、イベント変数を渡す/マップにマーカーを配置するにはどうすればよいですか?

分類Dev

D3でトリガーされているイベントの最中に対応する要素を削除するときに、要素のイベントリスナーを削除するにはどうすればよいですか?

Related 関連記事

  1. 1

    モデルがスケーリングされたときに3D法線を再計算するにはどうすればよいですか?

  2. 2

    ionic 3でデータが変更されたときに、変数の値を自動的に更新するにはどうすればよいですか?

  3. 3

    D3のデータに応じて要素を作成するにはどうすればよいですか?

  4. 4

    d3 v5:特定の属性が変更された場合にのみ移行するにはどうすればよいですか?

  5. 5

    ドラッグ時にd3でデータが正しく渡されることを確認するにはどうすればよいですか?

  6. 6

    データが更新されたときに再利用可能なd3.jsグラフを更新するにはどうすればよいですか?

  7. 7

    3D変換された要素のサイズを(遠近法で)計算するにはどうすればよいですか?

  8. 8

    d3.jsで、ネストされた選択の対象となるデータバインディングでインデックスi(またはその場所での強制/強制グループインデックスjの使用)を保持するにはどうすればよいですか?

  9. 9

    力のレイアウトグラフのデータを動的に変更するにはどうすればよいですか?D3

  10. 10

    D3で円グラフの場所を変更するにはどうすればよいですか?

  11. 11

    d3で関数linear()の名前を変更するにはどうすればよいですか?

  12. 12

    D3とBootstrapを使用してすべてのデータ要素を表示するにはどうすればよいですか?

  13. 13

    d3をフィルター処理するときに、グループ化されたグラフの一部を強調表示するにはどうすればよいですか。

  14. 14

    d3 jsでルートから選択したノードへのパスを強調表示するにはどうすればよいですか?

  15. 15

    d3 v4の要素に保存されているズーム変換をリセット/削除するにはどうすればよいですか?

  16. 16

    d3グラフのデータを更新するにはどうすればよいですか?

  17. 17

    d3でアニメーション化された軸ラベルの位置を制限するにはどうすればよいですか?

  18. 18

    VEGA ApiでD3ツリーデータを使用するにはどうすればよいですか?

  19. 19

    D3:データファイルソースを変更してグラフを動的に更新するにはどうすればよいですか?

  20. 20

    Matlabで複数年にわたる同じ日のデータの3D行列の平均を計算するにはどうすればよいですか?

  21. 21

    d3 要素への参照を機能させるにはどうすればよいですか?

  22. 22

    enter()とexit()はD3で更新されたデータをどのように検出しますか?

  23. 23

    HTMLデータをd3にマッピングするにはどうすればよいですか?

  24. 24

    D3 d3jsを使用して、要素の属性に基づいて「構成された」要素を階層的に追加するにはどうすればよいですか?

  25. 25

    d3を使用して作成された最初のdivの兄弟である新しいdiv要素を追加するにはどうすればよいですか?

  26. 26

    d3 v4の強制レイアウトで更新が必要なネストされたノードを構築するにはどうすればよいですか?

  27. 27

    D3の各データ要素に対して「呼び出し」を実行するにはどうすればよいですか?

  28. 28

    データマップとD3で完了したイベントをバインドするときに、イベント変数を渡す/マップにマーカーを配置するにはどうすればよいですか?

  29. 29

    D3でトリガーされているイベントの最中に対応する要素を削除するときに、要素のイベントリスナーを削除するにはどうすればよいですか?

ホットタグ

アーカイブ