【问题标题】:How can I specify the figsize of a graphviz representation of a decision tree?如何指定决策树的 graphviz 表示的 figsize?
【发布时间】:2018-12-23 02:47:06
【问题描述】:

我有一个在 iris 数据集上训练的决策树的 GraphViz 表示。

import graphviz 

dot_data = tree.export_graphviz(clf, out_file=None, 
                     feature_names=iris.feature_names,  
                     class_names=iris.target_names,  
                     filled=True, rounded=True,  
                     special_characters=True)

graph = graphviz.Source(dot_data)
graph

我正在使用上面的代码生成GraphViz 图,但它创建了一个大图。

我想手动控制这个图的figzise。我该怎么做?

【问题讨论】:

    标签: python scikit-learn graphviz


    【解决方案1】:

    在最初编写自己的函数来修改 DOT 源代码字符串以添加大小属性后,我偶然发现了 pydotplus.graphviz.Graph documentation 中的这一部分:

    Graphviz dot 语言中定义的所有属性都应该 支持。

    属性可以通过动态生成的方法设置:

     set_[attribute name], i.e. set_size, set_fontname
    

    您可以在下面看到使用此功能的示例。注意调用函数时的语法,因为 DOT 源代码需要在宽度和高度两边加上双引号。感叹号表示它将强制调整图像大小,直到其中一个尺寸与指定尺寸之一匹配,这似乎只在指定的尺寸大于图形的原始尺寸时才重要。

    import pydotplus
    from sklearn.datasets import load_breast_cancer
    from sklearn.tree import DecisionTreeClassifier, export_graphviz
    
    # Load in the dataset from sklearn
    dataset = load_breast_cancer()
    X = dataset.data
    y = dataset.target
    col_names = dataset.feature_names
    
    # Create and fit the decision tree
    clf_dt = DecisionTreeClassifier(criterion = 'gini', max_depth = 3)
    clf_dt.fit(X_train, y_train)
    
    # Export resulting tree to DOT source code string
    dot_data = export_graphviz(clf_dt,
                                    feature_names=col_names,
                                    out_file=None,
                                    filled=True,
                                    rounded=True)
    
    pydot_graph = pydotplus.graph_from_dot_data(dot_data)
    pydot_graph.write_png('original_tree.png')
    pydot_graph.set_size('"5,5!"')
    pydot_graph.write_png('resized_tree.png')
    

    点击图片以了解大小,因为它似乎没有在浏览器中正确显示。

    original_tree.png:

    resized_tree.png:

    另请注意,pydotplus.graphviz.Graph 对象有一个 to_string() 方法,该方法返回树的 DOT 源代码字符串,它也可以与您问题中的 graphviz.Source 对象一起使用:

    import graphviz
    gvz_graph = graphviz.Source(pydot_graph.to_string())
    gvz_graph
    

    【讨论】:

    • 感谢您的解决方案和详细解释:)
    • 没问题。在整理这个答案时,我学到了很多东西。很高兴它对你有用。 =)
    猜你喜欢
    • 1970-01-01
    • 2018-07-05
    • 2016-03-12
    • 2017-07-26
    • 2017-05-03
    • 2019-05-28
    • 1970-01-01
    • 2020-04-06
    • 2018-03-16
    相关资源
    最近更新 更多