Plotting decision tree, graphvizm pydotplus

The problem is that you are setting the parameter out_file to None.

If you look at the documentation, if you set it at None it returns the string file directly and does not create a file. And of course a string does not have a write method.

Therefore, do as follows :

dot_data = tree.export_graphviz(clf)
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)

Method graph_from_dot_data() didn't work for me even after specifying proper path for out_file.

Instead try using graph_from_dot_file method:

graph = pydotplus.graphviz.graph_from_dot_file("iris.dot")

I met the same error this morning. I use python 3.x and here is how I solve the problem.

from sklearn import tree
from sklearn.datasets import load_iris
from IPython.display import Image
import io

iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)

# Let's give dot_data some space so it will not feel nervous any more
dot_data = io.StringIO()
tree.export_graphviz(clf, out_file=dot_data)
import pydotplus

graph = pydotplus.graphviz.graph_from_dot_data(dot_data.getvalue())
# make sure you have graphviz installed and set in path
Image(graph.create_png())

if you use python 2.x, I believe you need to change "import io" as:

import StringIO

and,

dot_data = StringIO.StringIO()

Hope it helps.