Protovis กับ D3.js


84

TLDR: ใครมีประสบการณ์ของทั้ง protovis และ D3.js เพื่อชี้ให้เห็นความแตกต่างระหว่างทั้งสอง?

ฉันเล่นกับโปรโตวิสในช่วง 2 สัปดาห์ที่ผ่านมาและมันก็ยอดเยี่ยมมาก ยกเว้นตอนนี้ดูเหมือนว่าฉันจะชนกำแพงอิฐด้วยภาพเคลื่อนไหว

โปรโตวิส: http://vis.stanford.edu/protovis/

ฉันต้องการทำแอนิเมชันที่ค่อนข้างเรียบง่าย แต่ด้วยโปรโตวิสมันให้ความรู้สึกน้อยกว่าที่ใช้งานง่าย - ฉันเริ่มคิดว่าโปรโตวิสไม่เคยมีความหมายสำหรับแอนิเมชั่นจริงๆ ดังนั้นฉันจึงเริ่มดู D3.js:

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

ดูเหมือนกันมาก แต่:

  • ดูเหมือนจะมีน้ำหนักเบากว่า
  • ดูเหมือนว่าจะมีการโต้ตอบกับองค์ประกอบ DOM อื่น ๆ เช่นเดียวกับ SVG
  • ดูเหมือนว่าจะเพิ่มภาพเคลื่อนไหว

ใครสามารถชี้ให้เห็นความแตกต่างอื่น ๆ ?

ฉันจะขอบคุณมากสำหรับข้อมูลใด ๆ และทั้งหมด

คำตอบ:


117

ฉันทำงานกับ Protovis มาพอสมควรและบางอย่างกับ D3 นอกเหนือจากประเด็นที่คุณพูดถึงฉันคิดว่าความแตกต่างต่อไปนี้โดดเด่นสำหรับฉัน:

  • ที่ไหน Protovis ให้ชั้น abstraction ง่ายระหว่างคุณสมบัติภาพคุณระบุ, 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 แก้ไข (30/08/13) : D3 มีเอกสาร API ที่สมบูรณ์และละเอียดบน GitHubแล้วประเด็นนี้จึงไม่เกี่ยวข้องอีกต่อไป

  • สุดท้ายฉันไม่ได้ทำแอนิเมชั่นมากนัก แต่ฉันคิดว่าคุณถูกต้องทั้งหมด - D3 ให้การสนับสนุนแอนิเมชั่นมากกว่า Protovis โดยเฉพาะในแง่ของการเปลี่ยนภาพเคลื่อนไหว Protovis สามารถ re-ทำให้บางส่วนหรือทั้งหมดของการสร้างภาพตามความต้องการ แต่ไม่ได้รับการสนับสนุนใด ๆ สำหรับการก้าวผ่านภาพเคลื่อนไหว จำกัด ระยะเวลา - setIntervalคุณจะต้องรหัสมันทั้งหมดด้วยมือกับ D3 ดูเหมือนจะทำให้สิ่งนี้เป็นส่วนสำคัญของห้องสมุดมากขึ้น

แก้ไข (7/12/11) : ดูเหมือนว่าจะมีความแตกต่างที่สำคัญใหม่ - ณ วันที่ 28 มิถุนายน 2554 Protovis ไม่อยู่ระหว่างการพัฒนาอีกต่อไปและทีม Protovis กำลังผลักดัน D3.js แทน รุ่นล่าสุดค่อนข้างเสถียรดังนั้นจึงไม่ควรป้องกันไม่ให้คุณใช้งาน แต่เป็นประเด็นที่ต้องพิจารณาอย่างแน่นอน


ค่อนข้างถูกต้องยกเว้นจุดที่สาม คุณสามารถฝังกราฟิก Protovis ที่องค์ประกอบ HTML โดยพลการ
Geoff

@ เจฟฟ์ - ฉันอาจจะคุยโวเรื่องนี้ ประเด็นของฉันคือ D3 มีไว้เพื่อทำงานกับองค์ประกอบตามอำเภอใจในขณะที่การทำสิ่งนี้กับ Protovis (AFAIK) ต้องทำงานนอก API ที่กำหนดไว้ (เช่นโดยการตั้งค่า$domคุณสมบัติรูท) ฉันจะลดจุดนั้น
nrabinowitz

1
@ เจฟฟ์ - ในความคิดที่สองฉันทิ้งประเด็นนั้นไปทั้งหมด - อย่างใดฉันก็ไม่เคยสังเกตเห็นPanel#canvasทรัพย์สิน ขอบคุณสำหรับหมายเหตุ
nrabinowitz

ขอบคุณมากสำหรับการตอบกลับโดยละเอียดนั่นเป็นประโยชน์จริงๆ
โดย Richard Powell

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 แต่มีเหตุผลบางประการที่ทำให้พวกเขาเปลี่ยนแปลงบางอย่าง สิ่งต่างๆระหว่างทางจาก Protovis ไปยัง d3.js


ฉันพบกระดาษที่มีประโยชน์ โดยไม่ต้องทำการทดสอบใด ๆ มันทำให้ฉันรู้สึกซาบซึ้งว่ามันทำงานที่ไหนและไม่สมบูรณ์ ขอบคุณ.
Mike Gale
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.