在最初编写自己的函数来修改 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