143 votes

Équivalent de Graphviz en JavaScript pur

Quelqu'un a-t-il connaissance d'une implémentation pure, basée sur Javascript, des diagrammes de flux directionnels que GraphViz est capable de générer ? Je ne suis PAS intéressé par les jolis résultats visuels, mais par les calculs pour déterminer la profondeur maximale de chaque nœud, ainsi que la disposition des lignes de bézier qui sont optimisées pour minimiser le nombre d'arêtes qui se croisent lorsqu'on a affaire à un graphique plutôt qu'à un arbre d'informations. J'aimerais exécuter ce code à la fois dans un navigateur ; je suis conscient que je pourrais facilement intégrer Graphviz dans mon serveur Node en tant qu'extension, ou même dans un navigateur Web. popen() et de transmettre les informations sur les graphiques dans le .dot format.

À titre de référence, voici une sortie typique de GraphViz. Notez comment les éléments sont empilés et espacés pour permettre aux lignes de connexion de se déplacer entre les nœuds, sans se croiser (très souvent) ni passer par les nœuds.

enter image description here

0 votes

Avez-vous un exemple d'un tel diagramme, pour ceux d'entre nous qui ne sont pas familiers avec GraphViz ?

0 votes

Cela semble être un doublon de Code de visualisation de graphiques en javascript ?

3 votes

Peut-être pour vérifier. De nombreux commentaires et réponses pointent vers des outils graphiques qui n'ont rien à voir avec GraphViz, ou qui ne sont capables que de dessin GraphViz, mais ne peuvent pas faire la mise en page eux-mêmes.

94voto

Greg Sadetsky Points 1263

Jetez un coup d'œil à cette mise en œuvre purement JavaScript d'un moteur de rendu de toile .dot :

http://ushiroad.com/jsviz/

La bibliothèque n'est pas documentée - l'auteur doit absolument la faire connaître et la documenter davantage (je vais le contacter pour lui suggérer de la mettre sur github, au minimum).

Mise à jour : le code a été poussé sur github : https://github.com/gyuque/livizjs

Mise à jour (14/2/2013) Les personnes intéressées par le sujet devraient absolument jeter un coup d'œil à la page de Viz.js sur le site Web de l'entreprise. page d'exemple y répertoire Github .

Mise à jour (16/07/2020) : (sept ans plus tard) http://webgraphviz.com/ c'est aussi génial ! :-)

1 votes

Ce projet a l'air génial, et c'est probablement la meilleure solution de toutes celles que j'ai vues, mais il faudra certainement creuser un peu dans les sources pour savoir comment l'utiliser. Le code semble assez raisonnable cependant, donc ce n'est peut-être pas si mal.

0 votes

Jusqu'à présent, c'est ce qui se rapproche le plus de ce que je cherchais dans la question initiale. Ce n'est pas seulement un RENDER, il sait aussi calculer le graphe dirigé. Est-ce qu'il exécute DOT sur un backend quelque part, ou est-ce que l'algorithme complet de génération du graphe est exécuté sur mon navigateur ?

1 votes

@Armentage, ça fonctionne entièrement dans votre navigateur. Graphviz a été compilé en JavaScript, grâce à emscripten . Le code source, bien qu'il ne soit pas aussi documenté qu'il pourrait l'être, est maintenant heureusement (après avoir harcelé l'auteur sur Twitter et par e-mail) ;-) disponible. aquí . Bifurquer le projet et créer une API facile à utiliser serait un premier grand pas !

42voto

Zachary Vorhies Points 71

Après avoir cherché partout, j'ai enfin trouvé la réponse.

La solution était que quelqu'un a compilé Graphviz en Javascript en utilisant llvm + emscripten. Voici le lien :

http://viz-js.com/

La source peut être trouvée à l'adresse suivante : https://github.com/mdaines/viz.js

Et pour obtenir simplement une page web en haut de l'utilisation :

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

0 votes

C'est exactement ce que je recherchais aussi

6 votes

Mise à jour : J'ai fait un site de démonstration montrant comment l'utilisation de viz.js est amusante et facile ! Allez voir à www.webgraphviz.com

0 votes

Les liens github fournis sont cassés

19voto

user2016529 Points 86

Après avoir examiné toutes les options, j'ai trouvé viz.js ( https://github.com/mdaines/viz.js/ ) basé sur jsviz et graphviz.js pour avoir une API utilisable depuis une page web, et suffisamment d'exemples pour comprendre.

1 votes

Viz.js est génial et très facile, non pas qu'il ne supporte pas actuellement les étiquettes de type html : graphviz.org/doc/info/shapes.html#html

11voto

pedroteixeira Points 420

On pourrait essayer de convertir graphviz en javascript, comme cela a été fait pour l'exemple du "lecteur PDF" : https://github.com/kripken/emscripten

0 votes

C'est une suggestion vraiment géniale. Je pensais essayer de traduire le code en JS moi-même...... mais cette astuce llvm est une belle folie !

0 votes

J'ai en fait fait quelques essais jusqu'à présent emscripten est encore assez jeune, et la documentation brève. C'est définitivement un grand projet à suivre, je peux voir comment il pourrait fournir beaucoup de puissance. Mais pour l'instant, si vous n'êtes pas le gars qui l'a écrit, c'est un peu difficile à manier.

8voto

w00t Points 1253

Il ne s'agit pas d'un remplacement de graphviz prêt à l'emploi, mais de d3.js est une bibliothèque qui permet de réaliser diverses mises en page à partir de données données et constitue une excellente plateforme pour mettre en œuvre Graphviz.

Voici un exemple d'agencements dirigés par la force ce qui est une forme de ce que fait Graphviz.

Voici un discours sur les mises en page avec de superbes diapositives interactives .

Pour connaître le projet, le tutoriels sont très bonnes.

1 votes

github.com/cpettitt/dagre-d3 implémente le diagramme DOT en JavaScript. Vous pouvez jouer avec la démo à cpettitt.github.io/projet/dagre-d3/latest/demo/ .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X