在我的代码中,我在折线图上加载了一个包含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
是绘制坐标的函数的名称,而不会失去动画感。
怎么办?
以下是我的代码的链接:
答案 0 :(得分:5)
在我看来,你的问题是图表是同步的 - "持续时间"用于动画和图形转换。从本质上讲,改变持续时间将无济于事。
您可以引入时间倍增器。然后尝试将持续时间除以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)
你可能尝试的另一件事是一次添加两个点,即你跳过奇数刻度上的移位,并在偶数刻度上移动两倍的数量。这样可以减少开销,但会使动画变得有点晃动(但不是很多,因为它的播放速度也更快)。