Protovis vs D3.js
TLDR:有没有人有protovis和D3.js的经验来阐明两者之间的差异?
我过去两周一直在玩protovis,到目前为止效果很好。 除了现在我似乎已经用animation打了一下砖墙。
protovis: http ://vis.stanford.edu/protovis/
我想要做一些非常简单的animation,但是对于原创来说,感觉并不直观 – 我开始认为原创并不是真正意义上的animation。 所以,我开始看D3.js:
http://mbostock.github.com/d3/ex/stack.html
它看起来非常相似,但是:
- 看起来更轻量
- 似乎适合与其他DOM元素以及SVG进行交互
- 似乎适合添加animation
任何人都可以照亮任何其他的差异?
我会很感激任何和所有的input
我和Protovis做了相当多的工作,还有一些D3的工作。 除了你提到的几点,我认为以下的差异对我来说是显而易见的:
-
Protovis在你指定的视觉属性之间提供了一个简化的抽象层,D3使用了实际的CSS和DOM规范 – 所以你可以使用
.style('width', 10)
.width(10)
或.fillStyle('#00C')
.style('width', 10)
或.attr('fill', '#00C')
。 在这些例子中,差别是相当微不足道的,但是当您在SVG图像中绘制一条线时,会有很大的差异。 其结果是,使用D3可以感觉到更低一层 – 你有更多的控制权,但是你必须非常熟悉SVG语法来做一些Protovis更简单的事情。 -
如您所见,Protovis全部以SVG呈现,而D3可以使用DOM的其他部分。 这意味着,对于不需要基于SVG的可视化元素的可视化,即使对于不支持SVG的浏览器,也可以使用D3。 这也意味着将HTML和SVG集成到相同的可视化中变得更加容易,这对于处理文本(文本操作和布局在Protovis中相当薄弱)是非常好的。
-
D3会更改或删除一些基本的Protovis工具,如缩放和数据处理。 我反复讨厌像
pv.sum()
或pv.mean()
这样的基本实用程序没有D3等价物,尽pipe一些像.nest()
这样的库在两个库中共享。 编辑10/1/12: D3已经填写了它的数据实用程序,但Protovis还包含了一些,而D3没有,例如pv.dict
,pv.numerate
和pv.repeat
。 据推测,他们被排除在外,因为他们被认为不太普遍有用。 -
D3为asynchronous请求提供实用程序。 当我在Protovis中需要这个时,我通常必须使用一个外部库(即jQuery)。
-
相对于Protovis的相当详细的文档,D3 API文档
几乎完全不完整。 编辑(8/30/13) :D3现在在GitHub上有完整详细的API文档 ,所以这一点不再相关。 -
最后,我还没有做很多animation,但我认为你完全正确 – D3比Protovis提供了更多的animation支持,特别是在animation过渡方面。 Protovis可以根据需要重新渲染一些或全部可视化对象,但不支持通过有限持续时间的animation进行单步调整 – 您必须使用
setInterval
手工完成全部代码。 D3似乎使这成为图书馆不可分割的一部分。
编辑(7/12/11) :看起来有一个新的重大差异 – 截至2011年6月28日,Protovis已经不在积极发展之中,Protovis团队正在推动D3.js。 最后一个版本是相当稳定的,所以这不应该阻止你使用它,但它绝对是一个考虑点。
有一个教程,详细介绍D3和Protovis之间的区别。 我同意@ nrabinowitz的描述,但我会指出,我们最近添加了大量的API文档 。
最近有一篇来自Protovis / d3.js的作者发表的论文,主要关于d3.js,其中包含了一些为什么他们改变某些特定的原因东西从Protovis到d3.js