【问题标题】:Graphviz.Source not rendering in Jupyter NotebookGraphviz.Source 未在 Jupyter Notebook 中呈现
【发布时间】:2017-03-10 18:03:50
【问题描述】:

使用 scikit-learn 方便的 export_graphviz 函数导出 .dot 文件后。

我正在尝试使用 Graphviz 将点文件渲染到我的 Jupyter Notebook 中的单元格中:

import graphviz
from IPython.display import display

with open("tree_1.dot") as f:
    dot_graph = f.read()
display(graphviz.Source(dot_graph))

然而 out[ ] 只是一个空单元格。

我正在使用 graphviz 0.5(pip 然后安装 conda)、iPython 5.1 和 Python 3.5 点文件看起来正确,这里是第一个字符:

digraph Tree {\nnode [shape=box, style="filled", color=

iPython 显示似乎适用于其他对象,包括 Matplotlib 图和 Pandas 数据框。

我应该注意 Graphviz' site 上的示例也不起作用。

【问题讨论】:

标签: scikit-learn ipython graphviz jupyter-notebook


【解决方案1】:

此解决方案允许您直接插入 DOT 文本(无需先将其保存到文件中)

# convert a DOT source into graph directly
import graphviz 
from IPython.display import display
    
source= '''\
digraph sample {
A[label="AL"]
B[label="BL"]
C[label="CL"]
A->B
B->C 
B->D
D->C
C->A
}
'''
print (source)
gvz=graphviz.Source(source)
# produce PDF
#gvz.view()
print (gvz.source)
display(gvz)

【讨论】:

    【解决方案2】:

    尝试重新安装graphviz

    conda remove graphviz
    conda install python-graphviz
    graphviz.Source(dot_graph).view()
    

    【讨论】:

      【解决方案3】:

      尝试使用 pydotplus。

      import pydotplus
      

      通过 (1.1) 从外部导入 .dot

      pydot_graph = pydotplus.graph_from_dot_file("clf.dot")
      

      或 (1.2) 直接使用 .export_graphviz 输出

      dt = tree.DecisionTreeClassifier()
      dt = clf.fit(x,y)
      dt_graphviz = tree.export_graphviz(dt, out_file = None)
      
      pydot_graph = pydotplus.graph_from_dot_data(dt_graphviz)
      

      (2.) 然后使用

      显示pyplot图
      from IPython.display import Image
      
      Image(pydot_graph.create_png())
      

      【讨论】:

      • 最后两行好像作用不大,这个png是在哪里创建的?在/tmp/ 文件夹中?
      【解决方案4】:

      有可能在您发布此内容后进行了更改,因此您可能希望在可能的情况下更新您的库。

      我在这里使用的相关版本是:

      Python 2.7.10

      IPython 5.1.0

      graphviz 0.7.1

      如果您有一个格式良好的 .dot 文件,您可以通过以下方式将其显示到 jupyter out[.] 单元格:

      import graphviz
      
      with open("tree_1.dot") as f:
          dot_graph = f.read()
      
      # remove the display(...)
      
      graphviz.Source(dot_graph)
      

      【讨论】:

        【解决方案5】:
        graphviz.Source(dot_graph).view()
        

        【讨论】:

        • 请提供一些解释,以提高您的回答质量。请参阅此处以获取有关 Writing a Good Answer 的帮助。
        • @kapfy 我可以请您在您的答案周围添加一些上下文。仅使用 code-sn-p 答案很难弄清任何内容。这对提问者和其他读者都有帮助。
        猜你喜欢
        • 2018-05-31
        • 2021-02-06
        • 1970-01-01
        • 1970-01-01
        • 2017-03-04
        • 1970-01-01
        • 2020-06-27
        • 2020-02-20
        • 1970-01-01
        相关资源
        最近更新 更多