10

selection.sort() を使用して d3 でパスの選択を並べ替えると、データ結合が妨げられ、パスが間違ったデータ オブジェクトに再割り当てされます。

パスを並べ替えて、一部が他のパスの上になるようにしたいだけです(z-indexのように)。あるパスから別のパスにデータ オブジェクトを再割り当てしたくありません。

データ結合を妨げずにパスを並べ替えるにはどうすればよいですか?

_friends.selectAll('path').sort(function(a, b){
  return d3.ascending(a.Q, b.Q);
});
4

1 に答える 1

12

key functionを指定する必要があるようです。これにより、デフォルトに依存するのではなく、任意のキーでデータをバインドできます。これは、配列内のデータの位置、つまり順序​​ (この場合は変更される可能性があります) を使用することです。

各データの一意のキーがまだない場合は、ロード時にいつでも生成できます。

var id = 0;
for (var i = 0; i < data.length; i++) data[i].id = id++;

新しいデータを作成する場合は、インクリメントidを続けて新しい一意の ID を取得できます。

次に、データバインディングのために次のことができます:

.data(data, function(d) { return d.id; })
于 2012-07-16T10:32:46.567 に答える