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)
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.
OS Windows10 64bit Python 3.7.7 (créé avec Anaconda3-2019.03)
Créer un nouvel environnement Python 3.7 avec Anaconda (nommé Dataviz) Au 30 mai 2020, il s'agissait de python 3.7.7.
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)
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.
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
"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]))
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.
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)
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!
・ 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