在我的代码中,我正在加载超过900个数据的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
的计数器的帮助下阅读数据。 JSON中的所有数据都在0
到5000
之间。但是我修改了JSON的一些对象以实现更改域,然后通常所有行的新域必须等于更改。
例如,在JSON的第106行到"AF3":7000
。 (在这种情况下,所有行的域应为[0-7000])
在第300行"AF4": - 1000
。(在这种情况下,所有行的域名应为[-1000,7000])
我已故意修改了一些数据以实现此更改。我希望所有行都更新到这个新域,如果可能的话动画。
我该怎么做?
这是我的代码:
答案 0 :(得分:1)
要在所有折线图中更新域,我们需要在推送新数据之前重新计算域。
Plunker:http://plnkr.co/edit/AHWVM3HT7TDAiINFRlN9?p=preview
var newDomain = d3.extent(ids.map(function(d) {
return aData[cont][d]
}));
var oldDomain = y.domain()
newDomain[0] = newDomain[0] < oldDomain[0] ? newDomain[0] : oldDomain[0]
newDomain[1] = newDomain[1] > oldDomain[1] ? newDomain[1] : oldDomain[1]
y.domain(newDomain)
domain.text(y.domain())
关于图形修剪,需要在1ms内处理数据(在您的情况下,14个阵列,对阵列的推动和移位操作以及D3转换),这可能是不够的。不幸的是,我没有任何资源支持这一点。如果有人可以编辑此答案以提供证据,请随意。