Tương đương với JavaScript Graphviz thuần túy [đã đóng]


139

Có ai biết về việc triển khai dựa trên Javascript thuần túy các sơ đồ dòng định hướng mà GraphViz có khả năng tạo ra không? Tôi KHÔNG quan tâm đến đầu ra hình ảnh đẹp, nhưng các tính toán để tìm ra độ sâu tối đa của mỗi nút, cùng với cách bố trí các đường bezier được tối ưu hóa để giảm thiểu số lượng các cạnh giao nhau khi bạn xử lý biểu đồ thay vì cây của thông tin. Tôi muốn chạy mã này cả trong một trình duyệt; Tôi biết rằng tôi có thể dễ dàng nhúng Graphviz vào máy chủ Node của mình dưới dạng tiện ích mở rộng hoặc thậm chí popen()nó và truyền phát thông tin biểu đồ theo .dotđịnh dạng.

Để tham khảo, đây là một đầu ra GraphViz điển hình. Lưu ý cách các phần tử được xếp chồng lên nhau và cách nhau để cho phép các đường kết nối di chuyển giữa các nút, mà không giao nhau (rất thường xuyên) hoặc đi qua các nút.

nhập mô tả hình ảnh ở đây


Bạn có một ví dụ về sơ đồ như vậy, cho những người trong chúng ta không quen thuộc với GraphViz?
Matt Ball

Đây có vẻ là một bản sao của mã trực quan hóa đồ thị trong javascript?
Daniel Pryden

3
Có lẽ - kiểm tra nó ra. Rất nhiều ý kiến ​​và phản hồi đang chỉ vào các công cụ biểu đồ hoàn toàn không giống như GraphViz hoặc chỉ có khả năng vẽ đầu ra của GraphViz, nhưng không thể tự thực hiện bố cục.
Armentage

Câu trả lời:


84

Hãy xem triển khai JavaScript thuần túy này của trình kết xuất canvas .dot:

http://ushiroad.com/jsviz/

Thư viện không được ghi lại - tác giả chắc chắn phải công khai và ghi chép lại nhiều hơn (ít nhất là tôi sẽ liên lạc với anh ấy để đề nghị anh ấy đưa nó lên github, ít nhất là).

Cập nhật : mã đã được đẩy lên github: https://github.com/gyuque/livizjs

Cập nhật (14/2/2013) : một ứng cử viên khác đã phát sinh! Bất cứ ai quan tâm đến chủ đề này chắc chắn nên xem trang ví dụ của Viz.js và repo github .

Cập nhật (16/07/2020) : (bảy năm sau) http://webgraphviz.com/ cũng rất tuyệt! :-)


1
Dự án này có vẻ đáng kinh ngạc, và có lẽ là giải pháp tốt nhất trong tất cả những gì tôi đã thấy, nhưng chắc chắn sẽ cần một số công cụ khai thác trong nguồn để tìm ra cách sử dụng nó. Các mã có vẻ khá hợp lý mặc dù, vì vậy nó có thể không phải là xấu.
captncraig

Cho đến nay, đây là gần nhất với những gì tôi đang tìm kiếm trong câu hỏi ban đầu. Nó không chỉ là một NGƯỜI GIỚI THIỆU, nó còn biết cách tính toán biểu đồ được định hướng. Có phải nó đang chạy DOT trên một phụ trợ ở đâu đó hoặc toàn bộ thuật toán tạo đồ thị đang chạy trên trình duyệt của tôi không?
Armentage

1
@Armentage, nó chạy hoàn toàn trong trình duyệt của bạn. Graphviz đã được biên dịch thành JavaScript, nhờ có mô tả . Mã nguồn, mặc dù không được ghi lại như hiện tại, nhưng may mắn thay (sau khi cằn nhằn tác giả qua Twitter và e-mail) ;-) có sẵn ở đây . Ngã ba dự án và tạo một API dễ sử dụng cho nó sẽ là bước đầu tiên tuyệt vời ..!
Greg Sadetsky

5
Chỉ muốn thêm thư viện Graph Dracula vào danh sách các ứng cử viên. Bạn có thể xem một bản demo ở đây . Nó tính toán biểu đồ và hiển thị nó (sử dụng Raphael ); mã ngắn và sạch sẽ
Greg Sadetsky

Livizjs là một công cụ tuyệt vời, nhưng lưu ý rằng nó không hỗ trợ toàn bộ ngôn ngữ, chẳng hạn như 'cụm'
SirLenz0rlot

37

Sau khi tìm kiếm xa và cuối cùng tôi đã tìm thấy câu trả lời.

Giải pháp là ai đó đã biên dịch chéo Graphviz sang Javascript bằng cách sử dụng llvm + emscripten. Đây là đường dẫn:

http://viz-js.com/

Nguồn có thể được tìm thấy tại: https://github.com/mdaines/viz.js

Và để đơn giản sử dụng trang web:

var graphviz_text = ...;
document.body.innerHTML += Viz(graphviz_text, "svg");

Đây chính xác là những gì tôi đang tìm kiếm
RobAu

6
Cập nhật: Tôi đã tạo một trang web demo cho thấy cách hook trong viz.js thú vị và dễ dàng! Kiểm tra nó tại www.webgraphviz.com
Zachary Vorhies

Các liên kết github được cung cấp bị hỏng
Jaime



11

Mọi người có thể thử chuyển đổi graphviz sang javascript, giống như nó đã được thực hiện cho ví dụ 'trình đọc PDF': https://github.com/kripken/emscripten


Đây là một đề nghị cực kỳ tuyệt vời. Tôi đã nghĩ đến việc cố gắng dịch mã sang bản thân mình ...... nhưng thủ thuật này sẽ rất điên rồ!
Armentage

Tôi thực sự đã cho điều này một vài lần thử cho đến nay .. emscripten vẫn còn khá trẻ, và tài liệu ngắn gọn. Chắc chắn là một dự án tuyệt vời để xem, tôi có thể thấy làm thế nào nó có thể cung cấp rất nhiều sức mạnh. Nhưng ngay bây giờ nếu bạn không phải là người viết nó thì hơi khó sử dụng.
tổng

8

Đây không phải là một thay thế graphviz làm sẵn nhưng d3.js là một thư viện có thể thực hiện nhiều bố cục khác nhau từ dữ liệu đã cho và sẽ là một nền tảng tuyệt vời để triển khai graphviz.

Đây là một ví dụ về bố trí hướng lực , là một dạng của graphviz.

Đây là một bài phát biểu về bố cục với các slide tương tác cực kỳ tuyệt vời .

Để làm quen với dự án, các hướng dẫn rất tốt.


1
github.com/cpettitt/dagre-d3 thực hiện sơ đồ DOT trong JavaScript. Bạn có thể chơi với bản demo tại cpettitt.github.io/project/dagre-d3/latest/demo/ .
Arthur2e5

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.