TLDR:有没有人同时拥有protovis和D3.js的经验来阐明两者之间的差异?

在过去的两个星期中,我一直在与protovis一起玩,到目前为止,一切都很棒。除了现在,我似乎在动画方面有点撞墙。

protovis:http://vis.stanford.edu/protovis/

我想做一些非常简单的动画,但是使用protovis感觉起来不那么直观-我开始认为protovis从未真正用于动画。因此,我开始查看D3.js:

http://mbostock.github.com/d3/ex/stack.html

看起来非常相似,但是:

  • 似乎更轻量级
  • 似乎适合与其他DOM元素以及SVG
  • 进行交互
  • 似乎适合添加动画

  • 任何人都可以阐明其他差异吗?

    我将非常感谢您提供的所有信息

    最佳答案

    我在Protovis和D3上做了很多工作。除了您提到的要点外,我认为以下区别对我来说很突出:

  • Protovis在您指定的视觉属性之间提供了简化的抽象层,而D3使用实际的CSS和DOM规范-因此,您可以使用.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等效项,尽管在这两个库之间共享了诸如.nest()之类的某些实用程序。 编辑10/1/12: D3填写了其数据实用程序,但是Protovis仍然包含了D3所不包含的一些实用程序,例如pv.dictpv.numeratepv.repeat。大概它们被排除在外是因为它们被认为不太有用。
  • D3提供了用于异步请求的实用程序。在Protovis中需要此功能时,通常必须使用一个外部库(即jQuery)。
  • 与Protovis的相当详细的文档相比,
  • D3 API文档几乎完全缺少不完整的文档。 编辑(8/30/13):D3现在具有complete and detailed API documentation on GitHub,因此这一点不再重要。
  • 最后,我对动画没有做很多事情,但是我认为你是完全正确的-D3比Protovis提供了更多的动画支持,尤其是在动画过渡方面。 Protovis可以按需重新渲染部分或全部可视化文件,但是不支持逐步播放持续时间有限的动画-您必须使用setInterval手动编写所有代码。 D3似乎使它成为库中不可或缺的一部分。

  • 编辑(11/12/11):似乎有一个新的重大不同-截至2011年6月28日,Protovis不再处于积极开发中,Protovis团队正在推广D3.js。最后一个版本非常稳定,因此不应阻止您使用它,但这绝对是要考虑的一点。

    09-11 17:37