问题:
Graphviz输出的决策树可视化图像在jupyter显示没有问题,但是保存为其他类型(PDF)文件时出现中文乱码
原始代码
dot_data = tree.export_graphviz(clf
,feature_names= ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
,class_names=["琴酒","雪莉","贝尔摩德"]
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
graph.view()
解决办法:
一、将图形保存为png格式
第一步:在当前文件目录中找到上面代码输出的Source.gv文件
第二步:打开Source.gv文件,或者从文件夹找到并用记事本打开
第三步:修改文件字体名字:# fontname=“Microsoft YaHei”
第四步:在Anaconda Promot中运行 dot -Tpng tree.dot -o test.png
将结果保存为图片(前提是你已经安装好了配置好了graphviz环境,安装及配置环境请看这里)
第五步:运行没问题,就会在当前文件夹生成一个test.png的图片
打开之后就可以看到中文正常显示了
二、转换成PDF格式
直接更改上面的命令改为 dot -Tpng tree.dot -o test.pdf
是不行的,这里有另一种解决办法。
第一步:在输出决策树的notebook页面按F12键,弹出调试窗口
第二步:点击选择按钮,然后鼠标点击画出来的决策树
第三步:找到决策树图中对应的在调试窗口中被标记出来的代码,然后往上找到带有“output…”开头的代码,将这行代码复制(用ctrl+c快捷键)
第四步:在桌面新建一个txt文件,将刚才拷贝的代码放进去,保存
第五步:将文件重新命名为test.html
第六步:用浏览器打开这个html文件,成功,没有中文乱码
第七步:在此页面空白处右击鼠标–打印—打印成pdf
方法三:
这个方法是将上面的手动过程写到代码里了,运行之后会自动打开生成的pdf
dot_data = tree.export_graphviz(clf
,out_file = "tree.dot"
,feature_names= ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
,class_names=["琴酒","雪莉","贝尔摩德"]
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
with open("tree.dot",encoding='utf-8') as f:
dot_graph = f.read()
graph=graphviz.Source(dot_graph.replace("helvetica","MicrosoftYaHei")) #如果提示警告可以将MicrosoftYaHei改为FangSong
graph.view()