我是D3的新手,我发现它非常谦虚。d3 CSV中的可缩放树形图
我的目标是从CSV文件制作一个树形图。我想使用CSV格式,因为我将在电子表格中处理值,而且我很容易以这种方式保存文件。
我试图将数据存储在一个分层的格式,这样的事情(hier.csv):
parent,child,value
Homer Simpson,Bart,20
Homer Simpson,Lisa,14
Homer Simpson,Maggie,6
Peter Griffin,Chris,19
Peter Griffin,Meg,12
Peter Griffin,Stewie,9
而且我用这个Zoomable Treemap example。
我想让树变得任意深,即如果Bart在我的例子中有孩子,并根据姓名积累父母/孩子的关系。
我发现了一个great example of this for Sankey Diagrams,但我还没有找到Zoomable Treemaps的等价物。
有没有办法在Bostock's example的第124和126行之间插入一些代码以正确地为Zoomable Treemap格式化数据? (我可以更改我的CSV的布局,但想保留CSV格式)。使用这样的方法的东西nest()
,但显然这并不工作:
d3.csv("./hier.csv", function(hier) {
var root = {
"name": "myrootnode",
"children": d3.nest()
.key(function (d) { return d.parent; })
.key(function (d) { return d.child; })
.entries(hier)
};
initialize(root);
accumulate(root);
layout(root);
display(root);
//etc...
我看到的例子和地址位和这件StackOverflow上的问题,但一直没能一起拔端到结束。而我一直在研究和黑客无济于事。我会欢迎一些帮助。谢谢!
FIDDLE这里
小提琴注:
- 我在寻找近线#90,其中的注释表明
- 我建立一个内嵌变量来保存帮助削减副本flare.json
- 我打算在现实生活中将数据保存在单独的文件中,但对于JSFiddle,必须将其拉入内联;当然,如果我能够找出主要逻辑,这当然会很容易适应单独的数据文件。
- 此示例似乎不适用于D3版本3.0.4,它是JSFiddle的当前内置版本。我为例子导入了v2.x,因为这与Bostock的例子一致。这是一个潜在的单独的问题...
更新
我克服我的问题的一部分。我的想法并不太远,nest()
是必要的,但我没有正确更新我的访问器。这里的东西很邋遢的外观,主要作品: http://bl.ocks.org/maw246/7303963
主要差异(S)我的例子和博斯托克的关系:
- 它的加载后CSV被嵌套,使用
d3.nest()
。这种强制转换成一个分层的JSON对象格式 - 许多(如果不是全部)对“孩子”已经由“价值”替换,因为
d3.nest()
建立树木key
和values
属性,而不是树形图的预期name
和children
性能。用于块大小的value
属性保持不变。
问题剩余
- 它不会去任意深度。我正在考虑一种重组我的数据的方法,以更好地利用
d3.nest()
功能,但尚未尝试过。 - 孩子的名字显示
undefined
。我确信我只是略过了一些简单的东西,但我主要关心的是让核心功能发挥作用,所以当我有一分钟的时候,我会稍微深入一点。
注:我仍然在寻求帮助,干净且惯用的方法来这样做,包括如何最有效地组织CSV分层嵌套任意深度的咨询!
谢谢您的输入,保罗。这个解决方案是否超过了一个深度?我没有尝试过,因为正如你所说,我正在追求一些更习惯的东西,正如我今天上午更新的那样。 – Marc
对不起,这只适用于提供的数据样本(不是“Abe Simpson”)。我没有时间发布更通用的解决方案,但不应该很难将逻辑抽象为递归函数。 –
我认为保罗斯的观点是有效的,也是很好的评价。 – VividD