我有以下复杂的数据结构:
[
Object {id: 15, targets: Array[2]},
Object {id: 26, targets: Array[2]},
Object {id: 39, targets: Array[2]}
]
Run Code Online (Sandbox Code Playgroud)
'targets'是一个对象数组.他们每个人都有这样的形状:
Object {idTarget: "target1", events: Array[315]}
Object {idTarget: "target2", events: Array[310]}
Run Code Online (Sandbox Code Playgroud)
'events'是一个具有绘制实际值的数组.所以,每个元素都有这样的形状:
Object {timestamp: 1373241642, value: 1801.335}
Run Code Online (Sandbox Code Playgroud)
现在,有了这个结构化数据集,我想'g'为每个外部对象创建一个svg组(我指的是15,26和39),并且在每个组内部我想创建两条线,每条线对应一个,使用的值'events'.
拥有一个平面数据集后,很容易按照模式继续绘制:select + data + enter + append,但是我遇到了这个复杂数据集的问题.
例如,我甚至不知道如何分配键功能来启动.
svg.selectAll('.element')
.data(data, function(d){ return d.id + ?})
Run Code Online (Sandbox Code Playgroud)
我想要这种钥匙'15target1', '15target2', '26target1', '26target2'等等.
你是否建议简化数据集,放弃拥有整齐组的可能性,或者这里有一个解决方法可以让我轻松地绘制我想要的内容?
谢谢.
您需要嵌套选择.你的代码看起来像这样.
var gs = d3.selectAll("g").data(data, function(d) { return d.id; });
gs.enter().append("g");
var line = d3.svg.line().x(function(d) { return xscale(d.timestamp); })
.y(function(d) { return yscale(d.value); });
gs.selectAll("path")
.data(function(d) { return d.targets; }, function(d) { return d.idTarget; })
.enter().append("path")
.attr("d", function(d) { return line(d.events); });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1896 次 |
| 最近记录: |