Python中Graphviz使用问题:程序终止
Hey there! Let's break down why your visualization code is crashing and get it working properly. From what you shared, there are a few common issues that could be causing the problem—let's go through them one by one.
Common Issues & Fixes
1. Incomplete Method Call
Your code cuts off at graph = pydotplus.graph_from_dot_d...—this is a syntax error right off the bat. The full, correct method call needs to fetch the DOT data from your StringIO object:
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
2. Deprecated sklearn.externals.six Module
In newer versions of scikit-learn (0.23+), sklearn.externals.six has been removed. You should replace that import with Python's standard library StringIO:
# Replace this: # from sklearn.externals.six import StringIO # With this: from io import StringIO
3. Missing Graphviz System Dependency
pydotplus acts as a Python wrapper for Graphviz, but it doesn't include the actual Graphviz binary. If you haven't installed Graphviz on your system, the code will fail to generate the image. Here's how to fix it:
- Windows: Download the Graphviz installer, run it, and make sure to add Graphviz's
binfolder to your systemPATH. - macOS: Use Homebrew:
brew install graphviz - Linux (Debian/Ubuntu): Use apt:
sudo apt-get install graphviz
Also, double-check you have the required Python packages installed:
pip install pydotplus graphviz
Full Working Code Example
Here's the corrected, complete code that should run without crashing:
from sklearn import tree from io import StringIO import pydotplus from IPython.display import Image # Assume your model is already trained with X and Y model = tree.DecisionTreeClassifier() model = model.fit(X, Y) # Generate DOT data dot_data = StringIO() tree.export_graphviz( model, out_file=dot_data, filled=True, rounded=True, special_characters=True, leaves_parallel=False ) # Create graph from DOT data graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) # Save as PNG file graph.write_png("decision_tree.png") # Optional: Display the image in IPython/Jupyter Image(graph.create_png())
If you still run into issues, check the exact error message—usually it'll tell you if it's a missing dependency or syntax problem. For example, a "dot: command not found" error means Graphviz isn't installed on your system.
内容的提问来源于stack exchange,提问作者F.Ferlande

