52

I have this simple code:

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, y)

tree.plot_tree(clf.fit(X, y))
plt.show()

And the result I get is this graph: enter image description here

How do I make this graph legible? I'm using PyCharm Professional 2019.3 as my IDE.

4 Answers 4

74

I think the setting you are looking for is fontsize. You have to balance it with max_depth and figsize to get a readable plot. Here is an example

from sklearn import tree
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# load data
X, y = load_iris(return_X_y=True)

# create and train model
clf = tree.DecisionTreeClassifier(max_depth=4)  # set hyperparameter
clf.fit(X, y)

# plot tree
plt.figure(figsize=(12,12))  # set plot size (denoted in inches)
tree.plot_tree(clf, fontsize=10)
plt.show()

enter image description here

If you want to capture structure of the whole tree I guess saving the plot with small font and high dpi is the solution. Then you can open a picture and zoom to the specific nodes to inspect them.

# create and train model
clf = tree.DecisionTreeClassifier()
clf.fit(X, y)

# save plot
plt.figure(figsize=(12,12))
tree.plot_tree(clf, fontsize=6)
plt.savefig('tree_high_dpi', dpi=100)

Here is an example of how it looks like on the bigger tree.

enter image description here

enter image description here

Sign up to request clarification or add additional context in comments.

1 Comment

I saw from a linked answer that you can set max_depth on plot_tree, e.g. tree.plot_tree(decision_tree=clf, max_depth=4), instead of the classifier which I think is preferable since setting it on the classifier would affect the outcome of your tree, not just the visualization.
10

What about setting the size of the image before hand:

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, y)

fig, ax = plt.subplots(figsize=(10, 10))  # whatever size you want
tree.plot_tree(clf.fit(X, y), ax=ax)
plt.show()

1 Comment

This does nothing to actually fit the plot_tree to make it legible like the OP wanted. All this does is extend the subplot, and make it fit more items, but does not extend the subplot to an extent where anything is readable as a dynamic way would.
0

Try this:

plt.figure(figsize=(12,12))
tree.plot_tree(clf, fontsize=10)
plt.show()

1 Comment

Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
0

The problem is solved if you set the size before-hand:

from sklearn.tree import plot_tree, export_text
fig = plt.figure(figsize=(25,20))
_ = plot_tree(clf)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.