Facile avec juste Python! Affichez les figures Graphviz au format draw.io!

introduction

Cet article s'adresse aux personnes qui souhaitent modifier un diagramme de réseau réalisé avec python avec draw.io. ① Créez des données au format point qui constituent la base du graphe avec networkx, ② Sortez-le au format (xlm) qui peut être utilisé dans Draw.io en utilisant graphviz2drawio

Jusqu'à présent, j'ai juste dit que j'étais capable de le faire pour le moment, mais comme j'ai eu du mal à créer un environnement, j'espère que personne ne rentrera dans un marais similaire.

À la fin, quelque chose comme ça est terminé. (Affiché dans Draw.io Integration, une extension de VSCode)

J'étais accro à

Le package Graphviz utilisé pour dessiner avec Graphviz et le package Graphviz utilisé pour utiliser graphviz2drawio sont différents. Si vous ne séparez pas l'environnement, une erreur se produira. Il peut y avoir des packages qui sont censés être installés et utilisés par Graphviz seul, et ceux qui sont complétés dans le package. Ou la compatibilité entre les packages? Cette fois, en dehors de l'environnement de dessin avec Graphviz, nous avons préparé un environnement de sortie avec graphviz2drawio.

environnement

OS Windows10 64bit Python 3.7.7 (créé avec Anaconda3-2019.03)

Environnement

Créer un nouvel environnement Python 3.7 avec Anaconda (nommé Dataviz) Au 30 mai 2020, il s'agissait de python 3.7.7.

Installation de packages standard

Installez les packages suivants. C'est dans le package standard. ・ Networkx ・ Pydot (pas pydotplus) ・ Python-graphviz (n'oubliez pas que l'importation de graphviz ne fonctionnera pas sans elle)

Installation de packages non standard

De là, démarrez le terminal Anaconda et dans l'ordre ・ Graphviz (https://anaconda.org/alubbock/graphviz) ver 2.41 ・ Pygraphviz (https://anaconda.org/alubbock/pygraphviz) ver 1.5 ・ Graphviz2drawio (https://pypi.org/project/graphviz2drawio/0.2.0/) Je vais mettre.

(DataViz) C:\Users\(Nom d'utilisateur)>conda install graphviz pygraphviz -c alubbock
(DataViz) C:\Users\(Nom d'utilisateur)>pip install graphviz2drawio==0.2.0

ça ira. Avec graphviz standard

pygraphviz/graphviz_wrap.c(2987): fatal error C1083:Impossible d'ouvrir le fichier d'inclusion.'graphviz/cgraph.h':No such file or directory

J'obtiens l'erreur et je ne peux pas installer pygraphviz.

Enregistrement du plug-in Dot.exe (?)

Tapez maintenant dot -v pour voir si vous pouvez gérer les fichiers de points. Si quelque chose ne va pas, il vous sera demandé d'inclure dot -c comme suit:

(DataViz) C:\Users\(Nom d'utilisateur)>dot -v
dot - graphviz version 2.41.20170921.1950 (20170921.1950)
There is no layout engine support for "dot"
Perhaps "dot -c" needs to be run (with installer's privileges) to register the plugins?

Obéissant point -c (rien ne sort)

(DataViz) C:\Users\(Nom d'utilisateur)>dot -c
(DataViz) C:\Users\(Nom d'utilisateur)>

Si vous appuyez à nouveau sur point -c et obtenez le résultat suivant, ce sera un peu plus. Si cela n'est pas fait, une erreur telle que "svg" n'est pas reconnue… apparaîtra lors de l'utilisation de graphviz2drawio.

dot - graphviz version 2.41.20170921.1950 (20170921.1950)

libdir = "C:\Users\(Nom d'utilisateur)\.conda\envs\DataViz\Scripts"
Activated plugin library: gvplugin_dot_layout.dll
Using layout: dot:dot_layout
Activated plugin library: gvplugin_core.dll
Using render: dot:core
Using device: dot:dot:core
The plugin configuration file:
        C:\Users\(Nom d'utilisateur)\.conda\envs\DataViz\Scripts\config6
                was successfully loaded.
    render      :  cairo dot dot_json fig gdiplus json json0 map mp pic ps svg tk vml xdot xdot_json
    layout      :  circo dot fdp neato nop nop1 nop2 osage patchwork sfdp twopi
    textlayout  :  textlayout
    device      :  bmp canon cmap cmapx cmapx_np dot dot_json emf emfplus eps fig gif gv imap imap_np ismap jpe jpeg jpg json json0 metafile mp pdf pic plain plain-ext png ps ps2 svg tif tiff tk vml xdot xdot1.2 xdot1.4 xdot_json
    loadimage   :  (lib) bmp eps gif jpe jpeg jpg png ps svg

Réparer MxGraph.py

"C: \ Users \ (nom d'utilisateur) \ .conda \ envs \ DataViz \ Lib \ site-packages \ graphviz2drawio \ mx \ MxGraph.py" J'obtiens une erreur dans le fichier, mais je ne suis pas sûr de ce que j'essayais de faire, alors commentez-le et enregistrez-le. Si vous le savez, aidez-moi à corriger. Https://github.com/hbmartin/graphviz2drawio/issues

~\.conda\envs\DataViz\Lib\site-packages\graphviz2drawio\mx\MxGraph.py in add_mx_geo_with_points(element, curve)

    115        for cb in curve.cbset:
    116            ET.SubElement(array, MxConst.POINT, x=str(cb[0][0]), y=str(cb[0][1]))
--> 117        if cb:
    118            ET.SubElement(array, MxConst.POINT, x=str(cb[1][0]), y=str(cb[1][1]))
    119
UnboundLocalError: local variable 'cb' referenced before assignment

modifié

MxGraph.py


        for cb in curve.cbset:
            ET.SubElement(array, MxConst.POINT, x=str(cb[0][0]), y=str(cb[0][1]))
        #Commentez car cela provoquera une erreur
        #if cb:
        #    ET.SubElement(array, MxConst.POINT, x=str(cb[1][0]), y=str(cb[1][1]))

Supplément pour la construction de l'environnement

Au 30 mai 2020, le seul pygraphviz qui prend en charge python3 est celui d'alubbock, et il semble qu'il soit nécessaire d'inclure le graphviz d'alubbock en conséquence. Cependant, même avec ce graphviz, le graphique n'a pas pu être dessiné.

graphviz_test.py


from graphviz import Source
path = "edges.dot"
s = Source.from_file(path)
s.view()

résultat

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
//
FileNotFoundError: [WinError 2]Le fichier spécifié est introuvable.
During handling of the above exception, another exception occurred:
ExecutableNotFound                        Traceback (most recent call last)
//
ExecutableNotFound: failed to execute ['dot.bat', '-Tpdf', '-O', 'pdt.dot'], make sure the Graphviz executables are on your systems' PATH

Au contraire, si graphviz standard est inséré, graphviz2drawio ne peut pas être utilisé (pygraphviz appelé en interne ne peut pas être utilisé).

from graphviz2drawio import graphviz2drawio Quand tu cours

ImportError: DLL load failed:Le module spécifié est introuvable.

Cela deviendra.

Si ce n'est pas Windows, si vous créez l'environnement avec pip, installez le logiciel Graphviz et définissez le PATH approprié, vous n'aurez peut-être pas de tels problèmes.

Essayez d'utiliser

programme

Cette fois, j'utiliserai cet exemple. On suppose qu'il est enregistré dans le même dossier que edgelist2drawio.py.

edges.txt


A B
A C
A D
B C
C D
D E

programme python

edgelist2drawio.py


import networkx as nx
from graphviz2drawio import graphviz2drawio

#edges.Lire le texte sous forme de graphique dirigé
G = nx.read_edgelist('edges.txt', create_using=nx.DiGraph(), nodetype=str)

#Convertir les informations lues au format point
edges_dot = nx.drawing.nx_pydot.to_pydot(G)
#Exporter sous forme de fichier dot si nécessaire
# nx.drawing.nx_pydot.write_dot(G,"edges.dot")


#Dessinez avec graphviz basé sur des données au format point.Exporter sous forme de fichier io
xml = graphviz2drawio.convert(str(edges_dot))

#Lors de la lecture d'un fichier dot et de la conversion
# xml = graphviz2drawio.convert("edges.dot")

#Enregistrez le fichier converti
with open('edges.drawio', 'w') as f:
  print(xml, file=f)

Éditer

Lorsque vous ouvrez edge.drawio créé en exécutant le programme avec VS Code (l'intégration de Draw.io https://github.com/hediet/vscode-drawio.git est incluse dans l'extension), il semble qu'il a été écrit dans Graphviz. Vous pouvez ouvrir une image. Vous pouvez le modifier à votre guise!

image.png

en conclusion

・ Graphviz2drawio  https://pypi.org/project/graphviz2drawio/0.2.0/

・ GraphViz  https://www.graphviz.org/

・ J'ai appris la joie d'utiliser Draw.io avec VS Code dans cet article. "Il semble que Draw.io peut maintenant être utilisé avec VS Code!"  https://qiita.com/riku-shiru/items/5ab7c5aecdfea323ec4e

Recommended Posts

Facile avec juste Python! Affichez les figures Graphviz au format draw.io!
Journal de sortie au format JSON avec journalisation standard Python
Traitez facilement des images en Python avec Pillow
format en python
Format d'image en Python
Sortie japonaise avec Python
Obtenez une sortie standard en temps réel avec le sous-processus Python
Obtenez des résultats au format dict avec Python psycopg2
Lire le fichier json avec Python, le formater et générer le json
Trouvez la date de cette semaine dans n'importe quel format avec python
Sortie japonaise lors de l'utilisation de python dans Visual Studio
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel
Grattage au sélénium en Python
[Analyse de co-occurrence] Analyse de co-occurrence facile avec Python! [Python]
Exploitez LibreOffice avec Python
Grattage avec chromedriver en python
Débogage avec pdb en Python
Synchronisation facile des dossiers avec Python
Gérer les sons en Python
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Tweet avec image en Python
Combiné avec ordinal en Python
Compilation facile de Python avec NUITKA-Utilities
Serveur HTTP facile avec Python
Boîte de mot de passe facile en Python
Formater json avec Vim (avec python)
Format de chaîne avec l'opérateur Python%
Lire la sortie Fortran avec python
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
Reconnaissance des nombres dans les images avec Python
Tester avec des nombres aléatoires en Python
[Python] Traitement parallèle facile avec Joblib
Sortie de la liste du vendredi Premium 2017 en Python
Travailler avec LibreOffice en Python: import
Scraping avec Selenium en Python (Basic)
Analyse CSS avec cssutils en Python
Formater automatiquement le code Python avec Vim
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
Gérez les données au format NetCDF avec Python
Numer0n avec des objets fabriqués avec Python
Gérez le format GDS II avec Python
Ouvrez UTF-8 avec BOM en Python
Rendre la sortie standard non bloquante en Python
Utiliser rospy avec virtualenv dans Python3
Programmation facile Python + OpenCV avec Canopy
[Note] Sortie Hello world avec python
Visualisez les dépendances des packages python avec graphviz
Sortie du journal de test unitaire avec python
Transmission de courrier facile avec Hâte Python3
Optimisation bayésienne très simple avec Python
Utiliser Python mis en pyenv avec NeoVim
Heatmap avec dendrogramme en Python + matplotlib
Lire des fichiers en parallèle avec Python
Exporter et exporter des fichiers en Python
Générer un mot de passe pour le manuel avec python
Visualisez facilement vos données avec Python seaborn.
Utiliser OpenCV avec Python 3 dans Window
Jusqu'à traiter de python dans Atom
Exécution parallèle facile avec le sous-processus python
Graphique de sortie networkX avec graphviz (PyGraphviz)