无法在 Jupyter Notebook 中显示 graphviz 树

Posted

技术标签:

【中文标题】无法在 Jupyter Notebook 中显示 graphviz 树【英文标题】:Can't display graphviz tree in Jupyter Notebook 【发布时间】:2018-10-26 00:43:06 【问题描述】:

我正在尝试在 Jupyter Notebook 中显示决策树,但我不断收到消息:

CalledProcessError: Command '['dot.bat', '-Tsvg']' returned non-zero exit status 1

我正在使用以下代码:

from sklearn.datasets import load_iris 
from sklearn import tree
import graphviz
from IPython.display import SVG
iris = load_iris()
clf = tree.DecisionTreeClassifier()
fitted_clf = clf.fit(iris.data, iris.target)
graph = graphviz.Source(tree.export_graphviz(fitted_clf, 
                               feature_names = iris.feature_names,
                               class_names = iris.target_names, 
                               filled = True, rounded = True, 
                               special_characters = True))
SVG(graph.pipe(format='svg'))

当我尝试使用“管道”时,最后一行引发了异常。 我也试过:

graph.format = 'png'
graph.render('example')

而不是管道,但我继续提出类似的异常:

CalledProcessError: Command '['dot.bat', '-Tpng', '-O', 'example']' returned non-zero exit status 1

知道是什么导致了这种行为吗?我该如何解决?

(我正在使用 Python 3.5.2、sklearn 0.17.1、graphviz 0.8.2 和 IPython 6.4.0)

【问题讨论】:

【参考方案1】:

从 conda-forge repo 安装 graphviz xorg-libxrender xorg-libxpm,来自 pip 的 python 绑定通常可以为我解决这个问题。

conda install -c conda-forge graphviz xorg-libxrender xorg-libxpm
pip install graphviz

别忘了先卸载之前安装的包。

【讨论】:

这对我不起作用:第二部分未正确绑定到第一部分。对我有用的解决方案是使用conda install python-graphviz 而不是pip install graphviz:另见***.com/a/47043173/7262247【参考方案2】:

如果您使用 conda,Paul-Armand 的答案应该可以工作。如果没有,那么你必须运行:

brew install graphviz
pip install graphviz

如果您收到警告说 graphviz 已安装但未链接,请按照说明链接它。即brew link graphviz(或brew link --overwrite graphviz,如果前者给出错误)。

它在没有 brew 的情况下在 conda 中工作的原因是 conda install graphviz 实际上安装的是 c++ 库而不是 python 库。

【讨论】:

以上是关于无法在 Jupyter Notebook 中显示 graphviz 树的主要内容,如果未能解决你的问题,请参考以下文章

Pyechart在Jupyter Lab下无法正确显示图形的问题

在 jupyter notebook 中使用 joblib 时不显示打印输出

Conda 环境未显示在 Jupyter Notebook 中

Jupyter Notebook 无法在 Ubuntu WSL2 中打开

jupyter notebook在网页上显示作图

如何在 Jupyter Notebook 中的绘图旁边显示数据框