Dieser Artikel richtet sich an Personen, die ein mit Python erstelltes Netzwerkdiagramm mit draw.io bearbeiten möchten. ① Erstellen Sie mit networkx Daten im Punktformat, die die Grundlage des Diagramms bilden. ② Geben Sie es in dem Format (xlm) aus, das in Draw.io mit graphviz2drawio verwendet werden kann
Bisher habe ich nur gesagt, dass ich es vorerst geschafft habe, aber da es mir schwer gefallen ist, eine Umgebung zu schaffen, hoffe ich, dass niemand in einem ähnlichen Sumpf stecken bleibt.
Am Ende ist so etwas abgeschlossen. (Wird in Draw.io Integration, einer Erweiterung von VSCode, angezeigt.)
Das Graphviz-Paket, das zum Zeichnen mit Graphviz verwendet wird, und das Graphviz-Paket, das zum Verwenden von graphviz2drawio verwendet wird, unterscheiden sich. Wenn Sie die Umgebung nicht trennen, tritt ein Fehler auf. Möglicherweise gibt es Pakete, die nur von Graphviz installiert und verwendet werden sollen, und solche, die innerhalb des Pakets abgeschlossen sind. Oder Kompatibilität zwischen Paketen? Dieses Mal haben wir neben der Umgebung zum Zeichnen mit Graphviz eine Umgebung für die Ausgabe mit graphviz2drawio vorbereitet.
OS Windows10 64bit Python 3.7.7 (erstellt mit Anaconda3-2019.03)
Erstellen einer neuen Python 3.7-Umgebung mit Anaconda (Dataviz) Zum 30. Mai 2020 war es Python 3.7.7.
Installieren Sie die folgenden Pakete. Es ist im Standardpaket enthalten. ・ Networkx ・ Pydot (nicht Pydotplus) ・ Python-graphviz (Vergessen Sie nicht, dass der Import von graphviz ohne es nicht funktioniert.)
Von hier aus starten Sie das Anaconda-Terminal und in Ordnung ・ Graphviz (https://anaconda.org/alubbock/graphviz) Version 2.41 ・ Pygraphviz (https://anaconda.org/alubbock/pygraphviz) Version 1.5 ・ Graphviz2drawio (https://pypi.org/project/graphviz2drawio/0.2.0/) Ich werde einsetzen.
(DataViz) C:\Users\(Nutzername)>conda install graphviz pygraphviz -c alubbock
(DataViz) C:\Users\(Nutzername)>pip install graphviz2drawio==0.2.0
Wird besorgt. Mit Standard-Graphviz
pygraphviz/graphviz_wrap.c(2987): fatal error C1083:Include-Datei kann nicht geöffnet werden.'graphviz/cgraph.h':No such file or directory
Ich erhalte den Fehler und kann pygraphviz nicht installieren.
Geben Sie nun "dot -v" ein, um zu sehen, ob Punktdateien verarbeitet werden können. Wenn etwas schief geht, werden Sie aufgefordert, "dot -c" wie folgt anzugeben:
(DataViz) C:\Users\(Nutzername)>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?
Gehorsam dot -c
(nichts kommt heraus)
(DataViz) C:\Users\(Nutzername)>dot -c
(DataViz) C:\Users\(Nutzername)>
Wenn Sie erneut dot -c
drücken und das folgende Ergebnis erhalten, wird es etwas mehr sein.
Andernfalls wird ein Fehler wie "svg" nicht erkannt. Bei Verwendung von graphviz2drawio wird ein Fehler angezeigt.
dot - graphviz version 2.41.20170921.1950 (20170921.1950)
libdir = "C:\Users\(Nutzername)\.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\(Nutzername)\.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: \ Benutzer \ (Benutzername) \ .conda \ envs \ DataViz \ Lib \ site-packages \ graphviz2drawio \ mx \ MxGraph.py" Ich erhalte eine Fehlermeldung in der Datei, bin mir aber nicht sicher, was ich versucht habe. Kommentieren Sie sie aus und speichern Sie sie. Wenn Sie wissen, helfen Sie mir bitte bei der Korrektur. 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
Überarbeitet
MxGraph.py
for cb in curve.cbset:
ET.SubElement(array, MxConst.POINT, x=str(cb[0][0]), y=str(cb[0][1]))
#Kommentieren Sie aus, da dies zu einem Fehler führen wird
#if cb:
# ET.SubElement(array, MxConst.POINT, x=str(cb[1][0]), y=str(cb[1][1]))
Zum 30. Mai 2020 ist alubbock das einzige pygraphviz, das python3 unterstützt, und es scheint notwendig zu sein, alubbock's graphviz entsprechend einzubeziehen. Selbst mit diesem Diagramm konnte das Diagramm jedoch nicht gezeichnet werden.
graphviz_test.py
from graphviz import Source
path = "edges.dot"
s = Source.from_file(path)
s.view()
Ergebnis
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
//
FileNotFoundError: [WinError 2]Die angegebene Datei wurde nicht gefunden.
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
Im Gegensatz dazu kann graphviz2drawio nicht verwendet werden, wenn Standardgraphviz eingefügt wird (intern aufgerufenes pygraphviz kann nicht verwendet werden).
from graphviz2drawio import graphviz2drawio
Wenn du rennst
ImportError: DLL load failed:Das angegebene Modul wurde nicht gefunden.
Es wird werden.
Wenn es sich nicht um Windows handelt, wenn Sie die Umgebung mit pip erstellen, die Graphviz-Software installieren und den entsprechenden Pfad festlegen, treten möglicherweise keine derartigen Probleme auf.
Dieses Mal werde ich dieses Beispiel verwenden. Es wird davon ausgegangen, dass es im selben Ordner wie edgelist2drawio.py gespeichert ist.
edges.txt
A B
A C
A D
B C
C D
D E
Python-Programm
edgelist2drawio.py
import networkx as nx
from graphviz2drawio import graphviz2drawio
#edges.Lesen Sie den Text als gerichtete Grafik
G = nx.read_edgelist('edges.txt', create_using=nx.DiGraph(), nodetype=str)
#Konvertieren Sie die gelesenen Informationen in das Punktformat
edges_dot = nx.drawing.nx_pydot.to_pydot(G)
#Bei Bedarf als Punktdatei exportieren
# nx.drawing.nx_pydot.write_dot(G,"edges.dot")
#Zeichnen Sie mit graphviz basierend auf Punktformatdaten.Als Io-Datei exportieren
xml = graphviz2drawio.convert(str(edges_dot))
#Beim Lesen aus einer Punktdatei und beim Konvertieren
# xml = graphviz2drawio.convert("edges.dot")
#Speichern Sie die konvertierte Datei
with open('edges.drawio', 'w') as f:
print(xml, file=f)
Wenn Sie edge.drawio öffnen, das durch Ausführen des Programms mit VS Code erstellt wurde (Draw.io Integration https://github.com/hediet/vscode-drawio.git ist in der Erweiterung enthalten), sieht es so aus, als wäre es in Graphviz geschrieben worden. Sie können ein Bild öffnen. Sie können es bearbeiten, wie Sie möchten!
・ Graphviz2drawio https://pypi.org/project/graphviz2drawio/0.2.0/
・ GraphViz https://www.graphviz.org/
・ In diesem Artikel habe ich etwas über die Freude gelernt, Draw.io mit VS-Code zu verwenden. "Es scheint, dass Draw.io jetzt mit VS Code verwendet werden kann!" https://qiita.com/riku-shiru/items/5ab7c5aecdfea323ec4e
・
Recommended Posts