42

我有一个从我的代码生成的点文件,并希望在我的输出中呈现它。为此,我在网上看到命令是这样的cmd

dot -Tpng InputFile.dot -o OutputFile.png  for Graphviz

但我的问题是我想在我的 python 程序中使用这个内置的。

我该怎么做??

我查看了 pydot 但似乎无法在其中找到答案.....

4

6 回答 6

64

加载文件pydot.graph_from_dot_file以获取pydot.Dot类实例。然后使用该方法将其写入PNG文件write_png

import pydot

(graph,) = pydot.graph_from_dot_file('somefile.dot')
graph.write_png('somefile.png')
于 2011-03-15T18:29:37.197 回答
26

pydot 无论如何都需要安装 GraphViz 二进制文件,因此如果您已经生成了 dot 文件,您不妨自己直接调用 dot 。例如:

from subprocess import check_call
check_call(['dot','-Tpng','InputFile.dot','-o','OutputFile.png'])
于 2011-03-15T18:25:40.423 回答
6

您可以使用pygraphviz。加载图表后,您可以执行

graph.draw('file.png')
于 2011-03-15T18:26:33.017 回答
4

你可以试试:

import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
os.system('dot -Tpng random.dot -o random.png')
于 2018-08-26T20:03:57.280 回答
3

第一种解决方案)

通过在脚本中设置 PATH 进一步使用@Mauricio Carrero 的方法(在环境变量中设置的相同 PATH 没有这种效果!):

import os
import pydotplus
from sklearn.tree import export_graphviz

os.environ['PATH'] = os.environ['PATH']+';' + r'C:\Users\Admin\Anaconda3\Library\bin\graphviz'

# first export the dot file only if needed
export_graphviz(clf, out_file=filename + ".dot", feature_names = feature_names)
# now generate the dot_data again
dot_data = export_graphviz(clf, out_file=None, feature_names = feature_names)
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
graph.write_png(filename + "_gv.png")

这使得将 dot_data 保存为 png 成为可能。选择你自己的本地路径,你可能还安装了graphviz在`C:/Program Files (x86)/Graphviz2.38/bin/

该解决方案也来自 Sarunas 的回答: https ://datascience.stackexchange.com/questions/37428/graphviz-not-working-when-imported-inside-pydotplus-graphvizs-executables-not

第二种解决方案)

你也可以避免错误

Exception has occurred: InvocationException
GraphViz's executables not found

通过简单地给它它想要的东西,因为它要求 graphviz 对象的可执行文件:

graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
# graph is now a new Dot object!
# That is why we need to set_graphviz_executables for every new instance
# This cannot be set globally but must be set again and again
# that is why the PATH solution (1st Solution) above seems much better to me
# see the docs in https://pydotplus.readthedocs.io/reference.html
pathCur = 'C:\\Program Files (x86)\\Graphviz2.38\\bin\\'
graph.set_graphviz_executables({'dot': pathCur+'dot.exe', 'twopi': pathCur +'twopi.exe', 'neato': pathCur+'neato.exe', 'circo': pathCur+'circo.exe', 'fdp': pathCur+'fdp.exe'})
graph.write_png(filename + "_gv.png")

ps:在校准错误安装和完全卸载并再次安装、各种 PATH 变量、外部和内部 graphviz 安装、python-graphviz、pygraphviz 和所有我可以的解决方案之后,这两种方法是唯一对我有用的解决方案在这里找到,或在 将决策树直接转换为 png 或在 https://datascience.stackexchange.com/questions/37428/graphviz-not-working-when-imported-inside-pydotplus-graphvizs-executables-not?newreg= a789aadc5d4b4975949afadd3919fe55

对于 conda python-graphviz,我经常遇到安装错误,例如

InvalidArchiveError('Error with archive C:\\Users\\Admin\\Anaconda3\\pkgs\\openssl-1.1.1d-he774522_20ffr2kor\\pkg-openssl-1.1.1d-he774522_2.tar.zst.  You probably need to delete and re-download or re-create this file.  Message from libarchive was:\n\nCould not unlink')

对于 conda install graphviz,我得到了

InvalidArchiveError('Error with archive C:\\Users\\Admin\\Anaconda3\\pkgs\\openssl-1.1.1d-he774522_21ww0bpcs\\pkg-openssl-1.1.1d-he774522_2.tar.zst.  You probably need to delete and re-download or re-create this file.  Message from libarchive was:\n\nCould not unlink')

pygraphviz 需要我不想安装的 MS Visual C++:

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/

最后,除了第一种解决方案方法之外,没有任何指南能够真正正确地设置 PATH 变量。

于 2020-05-20T19:39:42.910 回答
2

您可以使用graphviz

# Convert a .dot file to .png
from graphviz import render
render('dot', 'png', 'fname.dot')

# To render an existing file in a notebook
from graphviz import Source
Source.from_file("fname.dot")
于 2020-03-11T03:51:37.053 回答