[英]Using d3.js, how can I display data faster on my chart?
在我的代码中,我在折线图上加载了一个包含508个条目的JSON。 此JSON包含某些计算机发出的数据,键是计算机的名称。
这是我的JSON的结构:
{
"AF3":3605.1496928113393,
"AF4":-6000.4375230516,
"F3":1700.3827875419374,
"F4":4822.544985821321,
"F7":4903.330735023786,
"F8":824.4048714773611,
"FC5":3259.4071092472655,
"FC6":4248.067359141752,
"O1":3714.5106599153364,
"O2":697.2904723891061,
"P7":522.7300768483767,
"P8":4050.79490288753,
"T7":2939.896657485737,
"T8":9.551935316881588
}
我目前正在一个名为cont
的计数器的帮助下读取数据,但是,我使用的代码需要很长时间来绘制图形:
data.length=508
if (data.length>cont)
cont++`
for (var name in groups) {
var group = groups[name]
group.data.push(aData[cont][name])
group.path.attr('d', line)
console.log(cont)
}
正如你在上面的gif中看到的,我的代码花了太长时间来绘制所有数据点。 我想毫不拖延地绘制我的数据集的所有数据元素(在这种情况下为508),例如:
data=[{508 elements}];
tick(data)=> draw the points in the graph at the same time, by dataset.
data2=[{50 elements}];
tick(data)=> draw the points in the graph at the same time, by dataset.
tick
是绘制坐标的函数的名称,而不会失去动画的感觉。
怎么办?
这是我的代码的链接:
在我看来,你的问题是图形是同步的 - “持续时间”既用于动画也用于图形转换。 从本质上讲,改变持续时间将无济于事。
您可以引入时间倍增器。 然后尝试将持续时间除以2,并使用乘数2.您的实际数据持续时间现在是持续时间* timeMultiplier(您可能希望更改名称以减少混淆,或在动画中使用timeDivider)。
// Shift domain
x.domain([now - (limit - 2) * duration * timeMultiplier, now - duration * timeMultiplier])
// Slide x-axis left
axis.transition()
.duration(duration)
.ease('linear')
.call(x.axis);
// Slide paths left
var t = paths.attr('transform', null)
.transition()
.duration(duration)
.ease('linear')
t.attr('transform', 'translate(' + x(now - (limit - 1) * duration * timeMultiplier) + ')')
.each('end', tick)
你可能尝试的另一件事是一次添加两个点,即你跳过奇数刻度上的转换,并在偶数刻度上移动两倍 。 这会降低开销,但会使动画变得有点晃动(但不是很多,因为它也会播放得更快)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.