Protovis与D3.js


84

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进行交互
  • 似乎适合添加动画

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

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

Answers:


117

我在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实用程序,例如刻度和数据处理。我一再烦恼像D3等效之类的基本实用程序,pv.sum()或者pv.mean()不具有D3等效项,尽管.nest()在两个库之间共享某些像D3一样的东西。编辑12年10月1日: D3填补了其数据的实用程序,但仍有少数Protovis包括与D3没有,例如pv.dictpv.numeratepv.repeat。大概它们被排除在外是因为它们被认为不太有用。

  • D3提供了用于异步请求的实用程序。在Protovis中需要此功能时,通常必须使用外部库(即jQuery)。

  • 与Protovis的相当详尽的文档相比,D3 API文档几乎完全缺少不完整的文档。编辑(8/30/13):D3现在在GitHub上具有完整而详细的API文档,因此这一点不再重要。

  • 最后,我对动画没有做太多事情,但我认为您是完全正确的-D3比Protovis提供了更多的动画支持,尤其是在动画过渡方面。Protovis可以根据需要重新渲染部分或全部可视化,但是不支持逐步播放持续时间有限的动画-您必须使用手动编写所有代码setInterval。D3似乎使它成为库中不可或缺的一部分。

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


除第三点外,完全正确。您可以在任意HTML元素上嵌入Protovis图形。
杰夫

@Jeff-我可能夸大了此事。我的观点是,D3用于处理任意元素,而使用Protovis(AFAIK)进行此操作需要在已建立的API之外进行操作(例如,通过设置root$dom属性)。我会降低这一点。
nrabinowitz 2011年

1
@Jeff-再三考虑,我完全放弃了这一点-不知何故我从未注意到过该Panel#canvas物业。感谢您的来信。
nrabinowitz 2011年

非常感谢您的详细答复-那真的很有帮助
作者:Richard Powell

2
自2013年3月以来,D3 v3的API参考似乎很完整,给人留下了非常好的印象。此外,还有一个很好的文档,其中包含大量的教程和漂亮的示例。
Mobiletainment

32

有一个教程详细介绍了D3和Protovis之间的区别。我同意@nrabinowitz的描述,尽管我会指出我们最近添加了广泛的API文档


1
是的,我昨天才注意到(非常感谢!)。我将更新后代的答案:)。
nrabinowitz 2011年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.