Протовис против D3.js

TL;DR: Кто-нибудь имеет опыт как протовиса, так и D3.js, чтобы осветить различия между ними?

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

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

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

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

Он выглядит очень похожим, но:

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

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

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

Ответ 1

Я проделал довольно много работы с 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 почти полностью не хватает неполной, по сравнению с довольно подробными документами для Protovis. Изменить (8/30/13). Теперь у D3 теперь полная и подробная документация API на GitHub, поэтому этот момент более не актуальны.

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

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

Ответ 2

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

Ответ 3

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