Python 如何指定决策树的graphviz表示的figsize?

Python 如何指定决策树的graphviz表示的figsize?,python,scikit-learn,graphviz,Python,Scikit Learn,Graphviz,我有一个在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, rou

我有一个在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
图,但它创建了一个大型图


我想手动控制此图的
figzie
。如何做到这一点?

在最初编写我自己的函数来修改点源代码字符串以添加大小属性后,我偶然发现了以下部分:

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:

调整了树的大小。png:

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

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

感谢您的解决方案和详细解释:)没问题。在整理这个答案的过程中,我学到了不少东西。很高兴它对你有用