D3.js 从大型数据集中选择一部分数据进行可视化
D3.js selecting a part of data to be visualized from a large dataset
我有大量实时传入数据用于可视化。我有数据集中的速度和时间。如果您认为 CSV 格式如下所示
Speed, Time
s1, t1
.......
sn,tn
但我只想形象化说 t1-t10 的速度。我怎样才能做到这一点?从更广泛的意义上讲,我应该能够 select 我将在图表中保留多少时间范围。可能来自 t1-t10、t5-t10 或 t10-t25 等
有人遇到过这样的问题吗?
我找到了解决问题的好方法。
一开始我可能会使用以下代码对完整数据进行切片:
var data=data.slice(startIndex,endIndex);
这样通过改变开始和结束参数我可以很容易地改变地块
虽然 .filter
方法通常是解决数据减少以供以后处理或可视化的最简单方法,但在您的特定示例中,我更喜欢其他策略:
- 用.sort
data.sort(function(a, b){return a.Time > b.Time;}))
对数组进行排序
- 创建 bisector
var bisect = d3.bisector(function(d) { return d.Time; });
我们需要平分线 left
和 right
,所以:
var biLeft = bisec.left, biRight = bisec.right;
有了这些函数,我们现在可以切片数组并提取请求的信息:
var subset = data.slice(biLeft(data, "t5"), biRight(data, "t10"));
我有大量实时传入数据用于可视化。我有数据集中的速度和时间。如果您认为 CSV 格式如下所示
Speed, Time
s1, t1
.......
sn,tn
但我只想形象化说 t1-t10 的速度。我怎样才能做到这一点?从更广泛的意义上讲,我应该能够 select 我将在图表中保留多少时间范围。可能来自 t1-t10、t5-t10 或 t10-t25 等
有人遇到过这样的问题吗?
我找到了解决问题的好方法。 一开始我可能会使用以下代码对完整数据进行切片:
var data=data.slice(startIndex,endIndex);
这样通过改变开始和结束参数我可以很容易地改变地块
虽然 .filter
方法通常是解决数据减少以供以后处理或可视化的最简单方法,但在您的特定示例中,我更喜欢其他策略:
- 用.sort
data.sort(function(a, b){return a.Time > b.Time;}))
对数组进行排序
- 创建 bisector
var bisect = d3.bisector(function(d) { return d.Time; });
我们需要平分线
left
和right
,所以:var biLeft = bisec.left, biRight = bisec.right;
有了这些函数,我们现在可以切片数组并提取请求的信息:
var subset = data.slice(biLeft(data, "t5"), biRight(data, "t10"));