Source code for pyquickhelper.helpgen.graphviz_helper
"""
Helper about graphviz.
:githublink:`%|py|5`
"""
import os
from ..loghelper import run_cmd
from .conf_path_tools import find_graphviz_dot
[docs]def plot_graphviz(dot, ax=None, temp_dot=None, temp_img=None, dpi=300):
"""
Plots a dot graph into a :epkg:`matplotlib` plot.
:param dot: dot language
:param ax: existing ax
:param temp_dot: temporary file, if None,
a file is created and removed
:param temp_img: temporary image, if None,
a file is created and removed
:param dpi: dpi
:return: ax
:githublink:`%|py|22`
"""
if temp_dot is None:
temp_dot = "temp_%d.dot" % id(dot)
clean_dot = True
else:
clean_dot = False
if temp_img is None:
temp_img = "temp_%d.png" % id(dot)
clean_img = True
else:
clean_img = False
with open(temp_dot, "w", encoding="utf-8") as f:
f.write(dot)
dot_path = find_graphviz_dot()
cmd = '"%s" -Gdpi=%d -Tpng -o "%s" "%s"' % (
dot_path, dpi, temp_img, temp_dot)
out, err = run_cmd(cmd, wait=True)
if err is not None:
err = err.strip("\r\n\t ")
if len(err) > 0:
if clean_dot:
os.remove(temp_dot)
if clean_img and os.path.exists(temp_img):
os.remove(temp_img)
raise RuntimeError(
"Unable to run command line"
"\n---CMD---\n{}\n---OUT---\n{}"
"\n---ERR---\n{}".format(
cmd, out, err))
if ax is None:
import matplotlib.pyplot as plt
ax = plt.gca()
image = plt.imread(temp_img)
else:
import matplotlib.pyplot as plt
image = plt.imread(temp_img)
ax.imshow(image)
if clean_dot:
os.remove(temp_dot)
if clean_img and os.path.exists(temp_img):
os.remove(temp_img)
return ax