Grafik grafik visualisasi dalam JavaScript

523

Saya memiliki struktur data yang mewakili grafik yang diarahkan, dan saya ingin membuatnya secara dinamis di halaman HTML. Grafik ini biasanya hanya beberapa node, mungkin sepuluh di ujung paling atas, jadi tebakan saya adalah bahwa kinerja tidak akan menjadi masalah besar. Idealnya, saya ingin dapat menghubungkannya dengan jQuery sehingga pengguna dapat mengubah tata letak secara manual dengan menyeret simpul-simpul di sekitarnya.

Catatan: Saya tidak mencari perpustakaan bagan.

Chris Farmer
sumber

Jawaban:

923

Saya baru saja mengumpulkan apa yang Anda cari: http://www.graphdracula.net

Ini JavaScript dengan tata letak grafik yang diarahkan, SVG dan Anda bahkan dapat menyeret node di sekitar. Masih membutuhkan beberapa penyesuaian, tetapi benar-benar dapat digunakan. Anda membuat simpul dan tepian dengan mudah dengan kode JavaScript seperti ini:

var g = new Graph();
g.addEdge("strawberry", "cherry");
g.addEdge("cherry", "apple");
g.addEdge("id34", "cherry");

Saya menggunakan perpustakaan JS Raphael yang disebutkan sebelumnya (contoh graffle) ditambah beberapa kode untuk algoritma tata letak grafik berbasis gaya yang saya temukan di internet (semuanya open source, lisensi MIT). Jika Anda memiliki komentar atau membutuhkan fitur tertentu, saya dapat mengimplementasikannya, tanyakan saja!


Anda mungkin ingin melihat proyek lain juga! Berikut adalah dua perbandingan meta:

  • SocialCompare memiliki daftar pustaka yang luas, dan baris "Node / edge graph" akan memfilter untuk visualisasi grafik.

  • DataVisualization.ch telah mengevaluasi banyak perpustakaan, termasuk yang node / grafik. Sayangnya tidak ada tautan langsung sehingga Anda harus memfilter untuk "grafik":Seleksi DataVisualization.ch

Berikut daftar proyek serupa (beberapa sudah disebutkan di sini):

Perpustakaan JavaScript Murni

  • vis.js mendukung banyak jenis grafik jaringan / tepi, ditambah jadwal dan grafik 2D / 3D. Tata letak otomatis, pengelompokan otomatis, mesin fisika kenyal, mobile-friendly, navigasi keyboard, tata letak hierarkis, animasi dll. MIT berlisensi dan dikembangkan oleh perusahaan Belanda yang mengkhususkan diri dalam penelitian tentang jaringan yang mengatur sendiri.

  • Cytoscape.js - analisis grafik interaktif dan visualisasi dengan dukungan seluler, mengikuti konvensi jQuery. Didanai melalui hibah NIH dan dikembangkan oleh @maxkfranz (lihat jawabannya di bawah ) dengan bantuan dari beberapa universitas dan organisasi lain.

  • JavaScript InfoVis Toolkit - Jit, kerangka kerja menggambar dan tata letak grafik interaktif multi-tujuan. Lihat misalnya Pohon Hiperbolik . Dibangun oleh arsitek dataviz Twitter Nicolas Garcia Belmonte dan dibeli oleh Sencha pada 2010.

  • D3.js Perpustakaan visualisasi JS multiguna yang kuat, penerus Protovis. Lihat contoh grafik yang diarahkan secara paksa , dan contoh grafik lainnya di galeri .

  • Pustaka visualisasi JS Plotly menggunakan D3.js dengan binding JS, Python, R, dan MATLAB. Lihat contoh nexworkx di IPython di sini , contoh interaksi manusia di sini , dan JS Embed API .

  • sigma.js Pustaka yang ringan namun kuat untuk menggambar grafik

  • jsPlumb plug-in jQuery untuk membuat grafik yang terhubung secara interaktif

  • Springy - algoritma tata letak grafik yang diarahkan secara paksa

  • Port Javascript Processing.js dari perpustakaan Pemrosesan oleh John Resig

  • JS Graph It - drag'n'drop box yang dihubungkan oleh garis lurus. Tata letak garis minimal.

  • RaphaelJS's Graffle - contoh grafik interaktif dari perpustakaan gambar vektor multi-tujuan umum. RaphaelJS tidak dapat mengatur tata letak node secara otomatis; Anda akan membutuhkan perpustakaan lain untuk itu.

  • JointJS Core - perpustakaan diagram sumber terbuka berlisensi MPL-David Durman. Ini dapat digunakan untuk membuat diagram statis atau alat diagram penuh dan pembuat aplikasi. Berfungsi di browser yang mendukung SVG. Algoritme tata letak tidak termasuk dalam paket inti

  • mxGraph Perpustakaan diagram HTML 5 komersial sebelumnya, sekarang tersedia di bawah Apache v2.0. mxGraph adalah perpustakaan dasar yang digunakan dalam draw.io .

Perpustakaan komersial

Perpustakaan terbengkalai

  • Cytoscape Web Embeddable JS Network viewer (tidak ada fitur baru yang direncanakan; digantikan oleh Cytoscape.js)

  • Canviz JS renderer untuk grafik Graphviz. Ditinggalkan pada Sep 2013.

  • arbor.js Grafik canggih dengan fisika dan eye-candy yang bagus. Ditinggalkan pada Mei 2012. Ada beberapa garpu semi-terawat .

  • jssvggraph "Algoritma tata letak grafik yang paling sederhana yang mungkin diimplementasikan sebagai perpustakaan Javascript yang menggunakan objek SVG". Ditinggalkan pada tahun 2012.

  • jsdot Aplikasi menggambar grafik sisi Klien. Ditinggalkan pada tahun 2011 .

  • Protovis Graphical Toolkit untuk Visualisasi (JavaScript). Digantikan oleh d3.

  • Representasi JS Interaktif Roda untuk koneksi dan hubungan (2008)

  • Skrip visualisasi grafik era 2007 JSViz

  • tata letak Grafik dagre untuk JavaScript

Perpustakaan Non-Javascript

Dan Dascalescu
sumber
4
Ya, ujung terarah dimungkinkan! Gunakan g.addEdge ("cherry", "apple", {"diarahkan": true});
Johann Philipp Strathausen
perlu menambahkan juga perpustakaan chart.js & chartnew.js. dan ini ( charts.livegap.com ) menghasilkan untuk itu
Omar Sedki
1
Ada dua perpustakaan lebih penting yang dapat ditambahkan ke daftar, yaitu Linkuroius.js dan VivaGraphJS .
Łukasz K
2
Apakah ada alternatif sumber terbuka untuk algoritme tata letak yFILES? Seperti yworks.com/products/yfiles-layout-algorithms-for-cytoscape
Ryan Chou
1
Saya telah membuat perpustakaan gratis dan ringan yang mungkin berguna bagi orang lain: github.com/n-yousefi/Arg-Graph
Naser Yousefi
48

Penafian: Saya adalah pengembang Cytoscape.js

Cytoscape.js adalah perpustakaan visualisasi grafik HTML5. API canggih dan mengikuti konvensi jQuery, termasuk

  • penyeleksi untuk query dan penyaringan ( cy.elements("node[weight >= 50].someClass")tidak seperti yang Anda harapkan),
  • rantai (misalnya cy.nodes().unselect().trigger("mycustomevent")),
  • Fungsi seperti jQuery untuk mengikat ke acara,
  • elemen sebagai koleksi (seperti jQuery memiliki koleksi HTMLDomElements),
  • ekstensibilitas (dapat menambahkan tata letak khusus, UI, fungsi inti & koleksi, dan sebagainya),
  • dan lainnya.

Jika Anda berpikir untuk membuat aplikasi web serius dengan grafik, Anda setidaknya harus mempertimbangkan Cytoscape.js. Ini gratis dan open-source:

http://js.cytoscape.org

maxkfranz
sumber
6
Semua API sepenuhnya didokumentasikan. Dokumen bahkan membantu Anda memulai (yaitu init). Ada juga contoh yang berjalan untuk masing-masing API, dan ada demo langsung. Fungsionalitasnya jauh di atas lib grafik JS dan dokumen lebih luas daripada kebanyakan proyek - baik komersial maupun sumber terbuka. Apa yang sebenarnya kurang bagi Anda dalam dokumen?
maxkfranz
3
Ok, maaf salahku. Saya tidak melihat dengan benar. Ya itu didokumentasikan dengan baik.
Badai
Apakah ia memiliki cara untuk menata grafik dalam urutan hierarkis (tata letak yang terlihat seperti pohon tetapi sebenarnya berupa grafik, artinya ada simpul dengan beberapa orang tua)
Mina
Baik dagre maupun lay out pertama berfungsi untuk kasus itu
maxkfranz
Saya perlu mengedit grafik dengan drag'n'drop panah mulai ujung dan ujung berakhir. Perpustakaan ini mengatakan hal-hal itu tidak dapat diubah. Jadi saya perlu mencari perpustakaan lain ...
Eugene Gr. Philippov
35

JsVIS cukup bagus, tetapi lambat dengan grafik yang lebih besar, dan telah ditinggalkan sejak 2007.

prefuse adalah seperangkat alat perangkat lunak untuk membuat visualisasi data interaktif yang kaya di Jawa. flare adalah pustaka ActionScript untuk membuat visualisasi yang berjalan di Adobe Flash Player, ditinggalkan sejak 2012.

Sam C
sumber
2
Perpustakaan-perpustakaan ini tampak agak tua pada saat ini, apa yang digunakan orang saat ini? Saya secara khusus mencari dalam merencanakan seri xy independen.
blong
22
-1 - prefuse adalah Java, bukan JavaScript. Flare adalah Flash, juga bukan JavaScript. JsVIS bermasalah dan ketinggalan jaman.
anatoly techtonik
2
@animuson: satu lagi di luar topik: OP meminta perpustakaan JavaScript. Satu-satunya bagian tentang JS dalam jawabannya adalah perpustakaan yang belum dikembangkan sejak 2007.
Dan Dascalescu
10

Dalam skenario komersial, kontestan serius pasti adalah yFiles untuk HTML :

Menawarkan:

  • Impor mudah data kustom ( demo online interaktif ini tampaknya cukup banyak melakukan persis apa yang dicari OP)
  • Pengeditan interaktif untuk membuat dan memanipulasi diagram melalui gerakan pengguna (lihat editor lengkap )
  • API pemrograman yang sangat besar untuk menyesuaikan setiap aspek perpustakaan
  • Dukungan untuk pengelompokan dan bersarang (baik interaktif, maupun melalui algoritma tata letak)
  • Tidak bergantung pada toolkit UI khusus tetapi mendukung integrasi ke hampir semua Javascript toolkit yang ada (lihat demo "integrasi" )
  • Tata letak otomatis (berbagai gaya, seperti "hierarkis", "organik", "ortogonal", "pohon", "bundar", "radial", dan lainnya)
  • Routing edge canggih otomatis (routing edge orthogonal dan organik dengan penghindaran rintangan)
  • Tata letak tambahan dan parsial (menambah dan menghapus elemen dan hanya sedikit atau tidak sama sekali mengubah sisa diagram)
  • Dukungan untuk pengelompokan dan bersarang (baik interaktif, maupun melalui algoritma tata letak)
  • Implementasi algoritma analisis grafik (jalur, pusat, aliran jaringan, dll.)
  • Menggunakan teknologi HTML 5 seperti SVG + CSS dan Canvas dan properti leveraging Javascript modern dan fitur ES5 dan ES6 lainnya (tapi untuk alasan yang sama tidak akan berjalan di IE versi 8 dan lebih rendah).
  • Menggunakan API modular yang dapat dimuat sesuai permintaan menggunakan pemuat UMD

Berikut ini adalah rendering sampel yang menunjukkan sebagian besar fitur yang diminta:

Cuplikan layar rendering sampel yang dibuat oleh demo BPMN.

Pengungkapan penuh: Saya bekerja untuk yWorks, tetapi di Stackoverflow saya tidak mewakili atasan saya.

Sebastian
sumber
3
Kumpulan algoritma terbaik, tetapi juga yang paling tertutup, sehingga tidak mungkin untuk digunakan dalam proyek-proyek sumber terbuka :-(
forresto
1
"Koleksi terbaik" mungkin benar, tetapi "paling tertutup" adalah relatif, dan "tidak mungkin" tidak benar: Ini adalah lisensi komersial, jadi kecuali proyek open-source menggunakan lisensi viral , itu dapat digunakan dalam proyek-proyek open-source. Tentu saja menggunakan proyek sumber terbuka di proyek sumber terbuka lainnya tidak terlalu bermasalah ...
Sebastian
1
Anda sepertinya tidak mengerti cara kerja open source. Apakah Anda mengatakan bahwa perusahaan Anda dapat memberikan proyek sumber terbuka hak untuk menggunakan perangkat lunak ini untuk pengembang tanpa batas, hak untuk mendistribusikannya kepada pengembang tanpa batas dan kontributor dan penguji, dengan biaya tetap satu kali? Tentu saja tidak .
Félix Saparelli
2
@ FélixSaparelli: Percayalah: Ya. Apa yang Anda gambarkan adalah mungkin dan hal-hal serupa telah dilakukan sebelumnya. Anda menautkan ke persyaratan lisensi standar, tetapi tentu saja perjanjian khusus dimungkinkan dan telah dibuat sebelumnya. Ini bukan tempat yang tepat untuk membahas ini. Jangan ragu untuk menghubungi yWorks secara langsung.
Sebastian
7

Seperti yang disebutkan guruz, JIT memiliki beberapa tata letak grafik / pohon yang indah, termasuk visualisasi RGraph dan HyperTree yang cukup menarik.

Juga, saya baru saja memasang implementasi super sederhana berbasis SVG di github (tanpa dependensi, ~ 125 LOC) yang seharusnya bekerja cukup baik untuk grafik kecil yang ditampilkan di browser modern.

Jack Rusher
sumber