python3实现决策树可视化需要用到包graphviz,graphviz默认不支持中文,所以当dot文件中包含中文字符时会出现乱码。
解决乱码方法一:
将dot源文件保存为UTF8(Ubuntu下默认为UTF8,Windows下默认为ASNI)格式,并将dot文档中的所有中文都进行修改,把中文包含在英文的引号(“”)中,如下:
“中文字符”
但是对于生成决策树dot文本中中文较多时,手动修改需要耗费时间较长,可行性较差,则可以用第二种方法解决乱码问题。
解决乱码方法二:
将dot源文件保存为UTF8(Ubuntu下默认为UTF8,Windows下默认为ASNI)格式,将图或结点的字体属性设置为中文字体,如下:
原始dot文本:
node [shape=box, style="filled, rounded", color="black", fontname=helvetica] ;
edge [fontname=helvetica] ;
修改后代码文本(主要修改fontname字段):
node [shape=box, style="filled, rounded", color="black", fontname="Microsoft YaHei"] ;
edge [fontname="Microsoft YaHei"] ;
修改dot文本可以选择手动修改dot文本,也可以选择python语句修改:
import re
f = open("casetree.dot", "r+", encoding="utf-8")
open('casetree_utf8.dot', 'w', encoding="utf-8").write(re.sub(r'fontname=helvetica', 'fontname="Microsoft YaHei"', f.read()))
f.close()
修改好后,在命令行使用如下命令生成png图:
dot -Tpng example.dot -o example.png
-T的意思是生成的文件是png格式的,example.dot是代码所在文件,-o指定生成的文件名。运行成功后将会在对应路径下得到example.png文件。
附:Windows系统中文字体的英文名
新細明體:PMingLiU
細明體:MingLiU
標楷體:DFKai-SB
黑体:SimHei
宋体:SimSun
新宋体:NSimSun
仿宋:FangSong
楷体:KaiTi
仿宋_GB2312:FangSong_GB2312
楷体_GB2312:KaiTi_GB2312
微軟正黑體:Microsoft JhengHei
微软雅黑体:Microsoft YaHei