この男がやろうとしていることと非常によく似た何かをD3でやりたいと思っています:
複数の (行と) 列のデータがあり、データのすべての部分を複数の要素にバインドする必要があります。上記でリンクした質問への回答は、これが入力選択でどのように機能するかを説明していますが、更新選択ではどうですか?
基本的に、更新選択で属性を設定する方法や、現在どのデータに属性が設定されているかなどを知る必要があります。これに関する例やドキュメントはどこにも見つかりません。
編集:さて、私は一般的にそれを機能させました。ただし、根本的な問題が 1 つ残っています。"data" 関数呼び出しに渡すデータ配列は正しいのに、"update" 選択に渡される値は正しくありません。
私はそれを少しデバッグしました。何が起こっているのか分かっていると思います: 出口選択で間違ったデータが削除されています。これを修正するにはどうすればよいですか。つまり、古いデータが削除され、新しい「データ」関数呼び出しで繰り返されるデータがそのまま残ることを確認するにはどうすればよいですか?
明確にするために、これが(「データ」関数呼び出しに)渡すデータであるとしましょう:
1、2、3
4、5、6
次回はこれを渡すとしましょう:
4、5、6
何らかの理由で、これは結果のデータです:
1、2、3
など。どうすればこれを修正できますか、またはこれは発生するはずがなく、何か間違ったことをしているために発生しているだけですか?
また、「data」関数を呼び出す前に、すべての「g」要素を選択して削除すると、役立つ場合があります。
svg.selectAll("g").remove();
svg.selectAll("g").data(data);
その後、この問題は発生しません。明らかに、これはエレガントなソリューションではありません。