用D3产生一个“活”图
我最近开始学习使用D3.js框架,虽然看起来它已经被devise成完全符合我的需求,但我找不到一个“实时”更新graphics的简单示例。
我正在寻找一种线形图,可以在新数据可用时进行更新。 新的数据可以通过点击一个带有“上次看到”时间戳或其他AJAX-y方法的json url来获得。
编辑:答案的D3部分在这里:
http://bost.ocks.org/mike/path/
现在,人们如何build议从服务器获取新的数据到客户端?
本教程可以帮助您创build实时线图: http : //bost.ocks.org/mike/path/
我想补充几点意见:
asynchronous数据
当你做一个实时的图表,你经常会得到的数据asynchronous,因此你不能知道每个“点”之间的确切时间。
- 对于这一行,你很幸运,因为本教程中描述的
line
不关心。 - 在平稳的过渡效果期间,这是更棘手的。 关键是将持续时间设置为最后一帧和上一帧之间的时间。 这对于下一个networking也是一个很好的近似,因为networking几乎总是有相同的吞吐量。
Y轴
在传统的线图上,很容易确定y域。 然而,在实时数据的情况下,y值往往会超出限制。 这就是为什么我会build议在每次迭代时调用一个函数来设置y域。 您也可以创build一个边界框。
性能
由于数据总是被添加,所以您可能需要非常注意事实,即您必须删除不再使用的值,否则数据会变得越来越重,整个animation可能会崩溃。
也许这个插件也可以是有趣的: 立体主义 。
Cubism.js是用于可视化时间序列的D3插件。 使用Cubism构build更好的实时仪表板,从Graphite,Cube和其他来源提取数据。 Cubism可以在GitHub的Apache许可下获得。
编辑:
其他interessant项目可以是人力车也利用D3。
JavaScript工具包,用于创build交互式实时graphics
看到这个例子: 未来的随机数据
这只是两个例子:
- 您可以让客户端定期从服务器获取新数据(即使用一些AJAX调用)。
- 如果浏览器支持,您可以打开一个websocket到服务器,这样服务器可以直接推送新的数据。
select一个或另一个取决于许多variables:你期望有多less个连接,数据的更新速率是多less,你打算支持哪些浏览器等等。
在任何情况下,d3.js库都不涉及如何获取数据,而是涉及如何显示它们。