Протовис против D3.js - PullRequest
84 голосов
/ 02 июня 2011

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

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

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

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

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

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

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

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

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

Ответы [ 3 ]

115 голосов
/ 02 июня 2011

Я проделал большую работу с 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(), совместно используются двумя библиотеками. Редактировать 01.10.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 вместо. Последний релиз довольно стабилен, так что это не должно мешать вам его использовать, но это определенно стоит рассмотреть.

32 голосов
/ 13 июня 2011

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

6 голосов
/ 13 января 2012

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

...