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.dictpv.numeratepv.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