私は簡単にd3ツリーを作成できるようにJSONデータをネストしようとしています。D3ネスト - レベルの数が一貫していません
d3.json("dbdata/getdata", function(error, data) {
var nestedData = {
"key":"root",
"values":
d3.nest()
.key(function(d){return d.category1})
.key(function(d){return d.category2})
.key(function(d){return d.category3})
.key(function(d){return d.category4})
.entries(data) }
私がいる問題ではない私のすべてのデータのエントリは、それらに割り当てられたすべての4つのカテゴリを持っているということです。私はこのコードを持っています。それらの中にはcategory1とcategory2しかないものもありますので、そのような場合にはその1つのリンク上に(ツリーグラフ上に)2つのノードしか持たないと思います。しかし、ここで何が起こるかは、すべてのカテゴリが割り当てられていなくても、すべてのリンクが4レベルの構造になることです。カテゴリが2つしかないセット(カテゴリ1とカテゴリ2)がある場合は、カテゴリ1が正しい場所に、カテゴリ2が最後に、2つのレベルの空のデータがそれらの間に作成されます。
ネスティングプロセスで何を無視するかを指定する方法はありますか(空のカテゴリには「0」が割り当てられます)。 私はこのようなものを試してみた:
.key(function(d){if(d.category2 !=="0")return d.category3})
しかし、それだけで「0」を「未定義」に変更し、構造を変更しません。
おそらく、私はそれらの空のレベルを無視するようにd3コードを変更する方法がありますか?私はD3に新たなんだと、私のコードは、この例に完全に基づいています:http://mbostock.github.io/d3/talk/20111018/tree.html
EDIT:
このように見えるのデータ構造を考える:
elements = [
{name: 'johny',
category1: 'cat1',
category2: 'cat2a'
},
{name: 'cindy',
category1: 'cat1',
category2: 'cat2b',
category3: 'cat3'
}];
私はD3ツリーが見えるしたいですこのように:
:現在 cat2a - johny
/
cat1
\
cat2b - cat3 - cindy
そして私は、この取得しています
回答をいただきありがとうございます。残念ながら、それは私が後にしていることではありません。私は自分の投稿を編集したので、今はちょっときれいかもしれません。 – Xnn04
確かに、自分の状況に合わせて自分の答えを編集しました。これが役に立ったら教えてください。そうでなければ、さらに編集するためにjsfiddleをまとめようとします。 –
あなたのコードを実装しようとしましたが、いくつかの問題がありました。問題は、この関数で作成された配列に2つのグループ(ノード/リンクの場合はセット)が格納されていることです。同じ親子グループがそこに倍増します。この特定の例では、d3MakeMeAtree(root.children [0] .children [0])のようなd3関数を呼び出すことでこれを克服できますが、これはほとんど最適な解決策ではありませんが、関数を変更する方法を理解できません正しく動作させるためです。 – Xnn04