Protovis проти D3.js


84

TLDR: Хтось має досвід роботи з протовісами та D3.js для висвітлення відмінностей між ними?

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

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

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

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

Це виглядає дуже схоже, але:

  • Здається більш легким
  • Здається, спрямована на взаємодію з іншими елементами DOM, а також SVG
  • Здається, спрямоване на додавання анімації

Чи може хтось висвітлити якісь інші відмінності?

Буду дуже вдячний за будь-який внесок

Відповіді:


117

Я провів чималу роботу з протовісом і кілька речей з D3. Окрім зазначених вами пунктів, я думаю, що для мене виділяються такі відмінності:

  • Там, де Protovis забезпечує спрощений рівень абстракції між заданими вами візуальними властивостями, D3 використовує фактичні специфікації CSS та DOM - тому замість .width(10)або .fillStyle('#00C')ви б використовували .style('width', 10)або .attr('fill', '#00C'). У цих прикладах різниця досить тривіальна, але коли ви робите щось на зразок малювання лінії на зображенні SVG, є великі відмінності. Результатом є те, що використання D3 може відчувати себе трохи нижчим рівнем - ви маєте більше контролю, але ви повинні бути досить знайомим із синтаксисом SVG, щоб робити деякі речі, які Protovis робить набагато легше.

  • Як ви зазначаєте, протовіс весь відображається у SVG, тоді як D3 може використовувати інші частини DOM. Це означає, що для візуалізації, для якої не потрібні візуальні елементи на основі SVG, ви можете використовувати D3 навіть з браузерами, які не підтримують SVG. Це також означає, що набагато простіше інтегрувати HTML і SVG в одну і ту ж візуалізацію, що дійсно приємно для таких речей, як робота з текстом (маніпулювання текстом і макет досить слабкі в протовісі).

  • D3 змінює або відкидає деякі основні утиліти Protovis, такі як ваги та маніпулювання даними. Мене неодноразово дратує, що основні утиліти, як pv.sum()або pv.mean()не мають еквівалентів D3, хоча деякі, як .nest(), спільно використовуються між двома бібліотеками. Edit 10/1/12: D3 заповнила свої утиліти даних, але є ще кілька , які Protovis включає в себе і D3 не, приміром pv.dict, pv.numerateі pv.repeat. Імовірно, їх залишили поза увагою, оскільки вони вважалися менш загальнокорисними.

  • D3 надає утиліти для асинхронних запитів. Коли я хочу це в протовісі, я, як правило, повинен використовувати зовнішню бібліотеку (тобто jQuery).

  • Документація D3 API майже повністю відсутня неповна, порівняно з досить докладними документами для Protovis. Редагувати (30.08.13) : D3 тепер має повну та детальну документацію щодо API на GitHub , тому цей пункт більше не актуальний.

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

Редагувати (7.12.11) : Схоже, є нова суттєва різниця - станом на 28 червня 2011 року протовіс більше не перебуває в активній розробці, а команда протовісу замість цього натискає D3.js. Останній випуск є досить стабільним, тому це не повинно заважати вам використовувати його, але це, безумовно, важливий момент, який слід врахувати.


Досить правильно, за винятком третього пункту. Ви можете вбудувати графіку Protovis у довільний елемент HTML.
Джефф

@Jeff - Можливо, я завищив справу. Моя думка полягала в тому, що D3 призначений для роботи з довільними елементами, тоді як для роботи з Protovis (AFAIK) потрібна робота поза встановленим API (наприклад, шляхом встановлення кореневої $domвластивості). Я зменшу цей тон.
nrabinowitz

1
@Jeff - Якщо замислитися, я повністю відмовляюся від цього - якось я ніколи не помічав цього Panel#canvasмайна. Дякую за записку.
nrabinowitz

Щиро дякую за детальну відповідь - це було дійсно корисно
Річард Пауелл

2
з березня 2013 року посилання на API для v3 D3, здається, є повним, і це справляє справді гарне враження. Крім того, є хороша документація з великою кількістю підручників та приємних прикладів.
Mobiletainment

32

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


1
Так, я щойно помітив це вчора (дуже вдячний!). Я оновлю свою відповідь для нащадків :).
nrabinowitz

6

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


Я знайшов цей папір корисним . Не проводячи жодного тестування, це дає мені розуміння того, де це працює, а де недосконало. Дякую.
Mike Gale
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.