我如何指定决策树的graphviz表示的大小

时间:2018-07-15 08:54:57

标签: python scikit-learn graphviz

我在虹膜数据集上有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

我该怎么做?

1 个答案:

答案 0 :(得分:5)

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

  

在Graphviz点语言中定义的所有属性都应       被支持。

     

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

 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: original tree

resized_tree.png:
resized tree

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

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