Graphviz

Graph- und Digraph-Objekte haben eine _repr_svg_()-Methode, sodass sie direkt in einem Jupyter-Notebook gerendert und dargestellt werden können.

Installation

Mit Spack könnt ihr Graphviz in eurem Kernel bereitstellen:

$ spack env activate python-374
$ spack env status
==> In environment python-374
$ spack install py-graphviz ^python@3.7.4%gcc@9.1.0
…
==> Successfully installed py-graphviz
…
==> Updating view at /srv/jupyter/spack/var/spack/environments/python-374/.spack-env/view
$ cd ~/jupyter-tutorial/pipenvs/python-374
$ pipenv --rm
$ pipenv --python=/srv/jupyter/spack/var/spack/environments/python-374/.spack-env/view/bin/python --site-packages
Creating a virtualenv for this project…
Pipfile: /srv/jupyter/jupyter-tutorial/pipenvs/python-374/Pipfile
Using /srv/jupyter/spack/var/spack/environments/python-374/.spack-env/view/bin/python (3.7.4) to create virtualenv…
Making site-packages available…
$ pipenv install

Alternativ könnt ihr Graphviz auch direkt in eurem Pipenv-Environment installieren:

  • für Debian/Ubuntu:

    $ sudo apt install graphviz
    
  • für Mac OS X:

    $ brew install graphviz
    

Anschließend könnt ihr dann in eurem Kernel das zugehörige Python-Paket installieren:

$ pipenv install graphviz

Einfaches Beispiel

[1]:
import graphviz

d = graphviz.Digraph()
d.edge('hello', 'world')
d
[1]:
../_images/matplotlib_graphviz_3_0.svg

Dateien schreiben

[2]:
from graphviz import Source

src = Source('digraph "hello world" { hello -> world }')

src.render('hello-world.gv')
[2]:
'hello-world.gv.pdf'

Alternativ können Dot-Dateien auch mit anderen Programmen, z.B. networkx erstellt werden:

[3]:
import networkx as nx
from networkx.drawing.nx_pydot import write_dot

G = nx.grid_2d_graph(5, 5)  # 5x5 grid
write_dot(G, "grid.gv")

Dot-Dateien konvertieren oder darstellen

Eine Dot-Datei kann in ein anderes Format, z.B. PDF, PNG, SVG etc., umgewandelt werden mit render:

[4]:
from graphviz import render

render('dot', 'png', 'hello-world.gv')
[4]:
'hello-world.gv.png'

Alternativ kann die Dot-Datei auch direkt im Notebook angezeigt werden mit Source.from_file:

[5]:
from graphviz import Source

Source.from_file('hello-world.gv')
[5]:
../_images/matplotlib_graphviz_13_0.svg