Einfach mit nur Python! Geben Sie Graphviz-Zahlen im draw.io-Format aus!

Einführung

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.)

Ich war süchtig nach

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.

Umgebung

OS Windows10 64bit Python 3.7.7 (erstellt mit Anaconda3-2019.03)

Umgebung

Erstellen einer neuen Python 3.7-Umgebung mit Anaconda (Dataviz) Zum 30. Mai 2020 war es Python 3.7.7.

Installation von Standardpaketen

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.)

Installation von nicht standardmäßigen Paketen

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.

Registrierung des Dot.exe-Plug-Ins (?)

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

Fix MxGraph.py

"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]))

Ergänzung für Umweltbau

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.

Versuchen Sie es mit

Programm

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)

Bearbeiten

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!

image.png

abschließend

・ 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

Einfach mit nur Python! Geben Sie Graphviz-Zahlen im draw.io-Format aus!
Ausgabeprotokoll im JSON-Format mit Python-Standardprotokollierung
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Format in Python
Bildformat in Python
Japanische Ausgabe mit Python
Holen Sie sich die Standardausgabe in Echtzeit mit dem Python-Unterprozess
Mit Python psycopg2 erhalten Sie Ergebnisse im Diktatformat
Lesen Sie die json-Datei mit Python, formatieren Sie sie und geben Sie json aus
Finden Sie das Datum dieser Woche in einem beliebigen Format mit Python
Japanische Ausgabe beim Umgang mit Python im Visual Studio
Es ist einfach, SQL mit Python auszuführen und das Ergebnis in Excel auszugeben
Schaben mit Selen in Python
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Betreiben Sie LibreOffice mit Python
Schaben mit Chromedriver in Python
Debuggen mit pdb in Python
Einfache Ordnersynchronisation mit Python
Umgang mit Sounds in Python
Scraping mit Selen in Python
Scraping mit Tor in Python
Tweet mit Bild in Python
Kombiniert mit Ordnungszahl in Python
Einfache Python-Kompilierung mit NUITKA-Utilities
Einfacher HTTP-Server mit Python
Einfaches Passwortfeld in Python
Formatieren Sie json mit Vim (mit Python)
String-Format mit Python% -Operator
Lesen Sie die Fortran-Ausgabe mit Python
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Zahlenerkennung in Bildern mit Python
Testen mit Zufallszahlen in Python
[Python] Einfache Parallelverarbeitung mit Joblib
Ausgabe 2017 Premium Friday List in Python
Arbeiten mit LibreOffice in Python: Importieren
Scraping mit Selen in Python (Basic)
CSS-Analyse mit cssutils in Python
Formatieren Sie Python-Code automatisch mit Vim
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
Behandeln Sie Daten im NetCDF-Format mit Python
Numer0n mit Elementen, die mit Python erstellt wurden
Behandeln Sie das GDS II-Format mit Python
Öffnen Sie UTF-8 mit Stückliste in Python
Machen Sie die Standardausgabe in Python nicht blockierend
Verwenden Sie rospy mit virtualenv in Python3
Einfache Python + OpenCV-Programmierung mit Canopy
[Hinweis] Hallo Weltausgabe mit Python
Visualisieren Sie Python-Paketabhängigkeiten mit graphviz
Unit Test Log Ausgabe mit Python
Einfache Mailübertragung mit Eile Python3
Bayesianische Optimierung, die mit Python sehr einfach ist
Verwenden Sie Python in pyenv mit NeoVim
Heatmap mit Dendrogramm in Python + Matplotlib
Lesen Sie Dateien parallel zu Python
Exportieren und Ausgeben von Dateien in Python
Passwort für Lehrbuch mit Python generieren
Visualisieren Sie Ihre Daten ganz einfach mit Python Seaborn.
Verwenden Sie OpenCV mit Python 3 in Window
Bis zum Umgang mit Python in Atom
Einfache parallele Ausführung mit Python-Unterprozess
NetzwerkX-Diagramm mit graphviz ausgeben (PyGraphviz)