2011-06-02 6 views
83

TLDR: Есть ли у кого-нибудь опыт обоих протовиков & D3.js, чтобы осветить различия между ними?Protovis vs. D3.js

Я играл с протовисом последние 2 недели, и до сих пор это было здорово. За исключением теперь, я, кажется, ударил немного кирпичной стены с анимацией.

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

Я хочу сделать некоторые довольно простой анимации, но с protovis он чувствует себя менее интуитивно - я начинаю думать, что protovis никогда не был предназначен для анимации. Итак, я начал смотреть на D3.js:

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

Он очень похож, но:

  • Кажется более легкий
  • кажись ориентирована на взаимодействие с другими элементами DOM, а также SVG
  • кажись направлены на добавление анимации

Может кто-нибудь осветить любые другие различия?

Я был бы очень благодарен за любые и все входные

ответ

115

Я сделал изрядное количество работы с 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, вы можете использовать D3 даже с браузерами, которые не поддерживают SVG. Это также означает, что гораздо проще интегрировать HTML и SVG в ту же визуализацию, что очень хорошо подходит для таких вещей, как обработка текста (текстовые манипуляции и макет в Protovis довольно слабый).

  • D3 изменяет или понижает некоторые основные утилиты Protovis, такие как масштабирование и манипулирование данными. Я неоднократно раздражался тем, что базовые утилиты, такие как pv.sum() или pv.mean(), не имеют эквивалентов D3, хотя некоторые из них, например .nest(), совместно используются в обеих библиотеках. Редактировать 10/1/12: D3 заполнил свои утилиты данных, но все еще есть некоторые, что Protovis включает, а D3 - нет. pv.dict, pv.numerate, и pv.repeat. Предположительно, они были опущены, потому что они считались менее полезными.

  • D3 предоставляет утилиты для асинхронных запросов. Когда я хочу это в Protovis, мне обычно приходится использовать внешнюю библиотеку (т. Е. JQuery).

  • Документация D3 API почти полностью отсутствует неполная, по сравнению с довольно подробными документами для Протовиса. Редактировать (8/30/13): D3 теперь имеет complete and detailed API documentation on GitHub, поэтому этот вопрос больше не уместен.

  • Наконец, я не много сделал с анимацией, но я думаю, что вы совершенно правы. D3 обеспечивает больше поддержки анимации, чем Protovis, особенно с точки зрения анимированных переходов. Protovis может повторно визуализировать некоторую или всю визуализацию по требованию, но не имеет никакой поддержки для перехода через анимацию с ограниченным сроком действия - вам придется закодировать ее вручную вручную с помощью setInterval. D3, кажется, делает это гораздо более неотъемлемой частью библиотеки.

Edit (7/12/11): Похоже, что нет нового главного различия - по состоянию на 28 июня 2011 года, Protovis уже не в стадии активного развития, и команда Protovis толкает D3. js вместо этого. Последняя версия довольно стабильна, поэтому это не должно мешать вам использовать ее, но это определенно необходимо рассмотреть.

+0

Довольно правильно, за исключением третьего пункта. Вы можете встраивать графику Protovis в произвольный элемент HTML. – Geoff

+0

@Jeff - Возможно, я преувеличил случай. Я хотел сказать, что D3 * предназначен для работы с произвольными элементами, в то время как с Protovis (AFAIK) требуется работать за пределами установленного API (например, устанавливая свойство root '$ dom'). Я смягчу этот момент. – nrabinowitz

+1

@Jeff - С другой стороны, я полностью отвлекаю эту точку - так или иначе я никогда не замечал свойство 'Panel # canvas'. Спасибо за примечание. – nrabinowitz

32

В этом учебном пособии подробно рассматриваются различия между D3 and Protovis. Я согласен с описанием @ nrabinowitz, хотя я укажу, что недавно мы добавили обширные API documentation.

+1

Да, я только что заметил, что вчера (очень ценим!). Я уточню свой ответ для потомков :). – nrabinowitz

+3

Майк, спасибо за хорошую работу над этими библиотеками :-) – ic3

6

В недавней публикации от авторов Protovis/d3.js, опубликованных в 2011 году http://vis.stanford.edu/files/2011-D3-InfoVis.pdf, в основном о d3.js, но содержащих некоторые причины, по которым они изменили некоторые вещи на пути от Protovis до d3.js.

+0

Я нашел, что бумага ** полезна **. Без проведения каких-либо испытаний это дает мне ** оценку ** того, где он работает и где он несовершенен. Благодарю. –