javascript protovis d3.js

javascript - Protovis vs D3.js



(3)

TLDR: ¿Alguien tiene experiencia con ambos protovis y D3.js para iluminar las diferencias entre los dos?

He estado jugando con protovis durante las últimas 2 semanas y ha sido excelente hasta ahora. Excepto que ahora parece que golpeé un poco de una pared de ladrillo con animación.

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

Quiero hacer algunas animaciones bastante simples, pero con protovis se siente menos que intuitivo. Estoy empezando a pensar que el protovis nunca fue realmente para animación. Entonces, comencé a buscar en D3.js:

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

Se ve muy similar, pero:

  • Parece más ligero
  • Parece orientado a interactuar con otros elementos DOM así como con SVG
  • Parece orientado a agregar animaciones

¿Alguien puede iluminar cualquier otra diferencia?

Estaría muy agradecido por cualquier entrada


Hay un documento reciente de los Autores de Protovis / d3.js publicado en 2011 http://vis.stanford.edu/files/2011-D3-InfoVis.pdf principalmente sobre d3.js, pero que contiene algunas de las razones por las que cambiaron cosas en el camino de Protovis a d3.js.


Hay un tutorial que cubre las diferencias entre D3 y Protovis con cierto detalle. Estoy de acuerdo con la descripción de @ nrabinowitz, aunque señalaré que recientemente agregamos una extensa documentación de API .


He trabajado mucho con Protovis y algunas cosas con D3. Además de los puntos que mencionas, creo que las siguientes diferencias se destacan para mí:

  • Donde Protovis proporciona una capa de abstracción simplificada entre las propiedades visuales que está especificando, D3 usa las especificaciones CSS y DOM, así que en lugar de .width(10) o .fillStyle(''#00C'') usaría .style(''width'', 10) o .attr(''fill'', ''#00C'') . En estos ejemplos, la diferencia es bastante trivial, pero cuando haces algo así como dibujar una línea en una imagen SVG, hay grandes diferencias. El resultado es que usar D3 puede sentirse un poco más bajo: tienes más control, pero debes estar bastante familiarizado con la sintaxis de SVG para hacer algunas de las cosas que Protovis hace mucho más fácilmente.

  • Como nota, Protovis está representado en SVG, mientras que D3 puede usar otras partes del DOM. Esto significa que, para visualizaciones que no requieren elementos visuales basados ​​en SVG, puede usar D3 incluso con navegadores que no son compatibles con SVG. También significa que es mucho más fácil integrar HTML y SVG en la misma visualización, lo que es realmente bueno para cosas como el manejo del texto (la manipulación del texto y el diseño es bastante débil en Protovis).

  • D3 cambia o elimina algunas de las utilidades básicas de Protovis, como escalas y manipulación de datos. Me molesta repetidamente que las utilidades básicas como pv.sum() o pv.mean() no tengan equivalentes D3, aunque algunas, como .nest() , se comparten entre las dos bibliotecas. Edit 10/1/12: D3 ha completado sus utilidades de datos, pero todavía hay algunas que Protovis incluye y D3 no, por ejemplo, pv.numerate , pv.repeat y pv.repeat . Es de suponer que fueron dejados de lado porque se los consideró menos útiles en general.

  • D3 proporciona utilidades para solicitudes asincrónicas. Cuando quiero esto en Protovis, generalmente tengo que usar una biblioteca externa (es decir, jQuery).

  • La documentación de D3 API casi no está completa , en comparación con los documentos bastante detallados para Protovis. Editar (30/8/13) : D3 ahora tiene documentación API completa y detallada en GitHub , por lo que este punto ya no es relevante.

  • Finalmente, no he hecho mucho con la animación, pero creo que tienes toda la razón: D3 proporciona más soporte de animación que Protovis, especialmente en términos de transiciones animadas. Protovis puede volver a renderizar parte o la totalidad de la visualización a pedido, pero no tiene ningún soporte para recorrer una animación de duración limitada. Tendría que codificarlo todo a mano con setInterval . D3 parece hacer de esto una parte mucho más integral de la biblioteca.

Editar (12/07/11) : Parece que hay una nueva diferencia importante: a partir del 28 de junio de 2011, Protovis ya no está en desarrollo activo, y el equipo Protovis está presionando D3.js en su lugar. La última versión es bastante estable, por lo que esto no debería impedir su uso, pero definitivamente es un punto a considerar.