大家在画决策树的过程中,一定非常希望能画出带有中文特征名称或类别名称的决策树。但我们直接用graphviz画图时,中文却会出现乱码。如下图所示,相信大家都遇见过:在红酒数据集中,将feature_names和class_name是设为中文的后果

于是乎,本人在网上搜索了一些攻略,但很多博客复制黏贴,且错误百出,我在综合了好几篇博客后,才成功画出中文的决策树。所以想重新梳理下解决办法,供各位参考。

1、修改graphviz配置文件

我们首先要找到你电脑中的graphviz文件夹中叫做"fonts"的文件,你可能会发现有两个文件夹都有fonts,分别是C:\Program Files (x86)\Graphviz2.38\etc\fonts和C:\ProgramFiles (x86)\Graphviz2.38\fonts。请将两个fonts文件分别用记事本打开。如果有

则将其修改为

。此处可能会有一个fonts文件已经正确,则请忽略改文件。此外,保存可能需要管理员权限,我自己是将这个fonts文件另存在桌面后,再复制到原路径替换,才成功的。

2、将决策树dot_data文件保存下来,修改字体并保存为 UTF-8格式

保存下来的目的是为了dot_data文件的字体,并将其转换为UTF-8格式。例如:         dot_data = tree.export_graphviz(clf,out_file = None ,feature_names= feature_name,class_names=["琴酒","雪莉","贝尔摩德"] ,filled=True,rounded=True) with open(r'C:\Users\86186\Desktop\AI-利率定价\dot测试.txt', 'w') as f:

f.writelines(dot_data)

我们成功将dot格式的文件保存在txt文件中。打开该文件后,原始状态如下图:未修改前

我们可以手动进行如下修改:步骤1:将两处helvetica,修改为"Microsoft YaHei",注意helvetica没有引号,但修改好的中文字体一定一定要加引号,否则会画不出图!!!!步骤2,另存为UTF-8格式,注意在另存的时候在新的文件名的下方有选择保存的格式,调整为UTF-8即可。调整好的状态为下图:修改好字体和编码格式后的样子

3、重新加载这个dot文件并画图

进行上述修改后,有两种方法可以画出中文图。

一是将另存为的这个txt重新读取,并绘图,代码如下:

with open((r'C:\Users\86186\Desktop\AI-利率定价\dot测试1.txt',"r",encoding='utf-8') as f:

text = f.read()

graph = pydotplus.graph_from_dot_data(text)

graph.write_png("试试.png")

如要保存为pdf格式,此处可改为graph.write_pdf("iris.pdf") 。pydotplus要先pip安装后,在程序中import。

二是在CMD命令行窗口,将路径切换成存放这个dot文件的文件夹,然后运行以下命令:

dot -Tpng dot测试1.txt -o example.png

如要保存为pdf格式,此处将后缀名改为pdf即可。

4、懒人的方法

如果嫌本攻略的2和3手工操作繁琐,可运用codecs库将原dot文件自动改为UTF-8格式,并将讨厌的helvetica自动改为"Microsoft YaHei"(请千万注意字体加引号,并重新加载画图,从而实现一次性运行(首次画中文图,第一步仍然需要):

with open(r'C:\Users\86186\Desktop\AI-利率定价\dot测试.txt', 'w') as f:

f.writelines(dot_data)

import codecs

txt_dir = r'C:\Users\86186\Desktop\AI-利率定价\dot测试.txt'

txt_dir_utf8 = r'C:\Users\86186\Desktop\AI-利率定价\dot测试1.txt'

with codecs.open(txt_dir, 'r') as f, codecs.open(txt_dir_utf8, 'w', encoding='utf-8') as wf:

for line in f:

lines = line.strip().split('\t')

if 'label' in lines[0]:

newline = lines[0].replace('\n', '').replace(' ', '')

else:

newline = lines[0].replace('\n','').replace('helvetica', '"Microsoft YaHei"')

wf.write(newline + '\t')

with open(txt_dir_utf8, "r",encoding='utf-8') as f:

text = f.read()

graph = pydotplus.graph_from_dot_data(text)

graph.write_png("试试.png")

特别说明:本人使用的开发环境是VS code,画图命令通过pydotplus库进行,可能不如Jupter notebook方便,但改成中文的原理是一样的。

python graphviz中文乱码_graphviz画决策树图中文乱码问题终极解决方案相关推荐

  1. 一行代码解决graphviz画决策树图中文乱码问题(附带参数介绍)

    若我们的直接写这样的代码 feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类', '花青素', '颜色强度','色调','od28 ...

  2. python导入Graphviz库-画决策树图

    学习决策树时,发现如果要用python画决策树,python需要导入Graphviz库,看了几篇csdn,发现个别文章不是很全,会出错误,这里简单记录下完整过程. 文章目录 0.下载Graphviz- ...

  3. python中文字体奇怪_python中文编码(汉字乱码问题解决方案)

    Python脚本对英语字母是非常友好的,但对中文就不是了.我们用 Python 输出 "Hello, how are you!",英文没有问题,但是如果你输出中文字符 " ...

  4. matplotlib画折线图中文乱码解决

    说到底,乱码的原因是因为没有安装中文字体导致的,所以首先要做的就是安装一个中文字体. 报表中发现有中文乱码和中文字体不整齐(重叠)的情况,首先考虑的就是操作系统是否有中文字体,在CentOS 7中发现 ...

  5. 怎样用python生成中文字符画_如何利用Python实现图片转字符画详解

    本篇文章主要介绍了Python实现图片转字符画的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 字符画真的很有意思,将图片中的像素用字符代替,就生成了字符画. 但是像 ...

  6. 《机器学习》西瓜书课后习题4.3——python实现基于信息熵划分的决策树算法(简单、全面)

    <机器学习>西瓜书课后习题4.3--python实现基于信息熵划分的决策树算法 <机器学习>西瓜书P93 4.3 试编程实现基于信息熵进行划分选择的决策树算法,并为表4.3中数 ...

  7. php mysql存中文,PHP+MySQL存储数据常见中文乱码问题小结

    PHP+MySQL存储数据常见中文乱码问题小结 本文实例总结了PHP+MySQL存储数据常见中文乱码问题.分享给大家供大家参考,具体如下: PHP+MySQL出现中文乱码的常见原因: 1. MYSQL ...

  8. python读取文件路径乱码 linux_Python之pandas读写文件乱码的解决方法

    Python之pandas读写文件乱码的解决方法 python读写文件有时候会出现 'XXX'编码不能打开XXX什么的,用记事本打开要读取的文件,另存为UTF-8编码,然后再用py去读应该可以了.如果 ...

  9. 如何解决oracle中文乱码问题,oracle中解决中文乱码问题

    中文乱码问题解决 1.查看服务器端编码 select userenv('language') from dual; 查到结果是: USERENV('LANGUAGE') --------------- ...

最新文章

  1. WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】
  2. 灰度重采样(Gray Resampling
  3. B站发布2020年一季度财报:月活用户达1.72亿,日活用户突破5000万
  4. WebSocket使用,包括服务端和客户端(JAVA实现)
  5. 今天心情好,发首我喜欢的歌---天黑黑
  6. 【机器学习】算法调参
  7. ZooKeeper原生java客户端使用
  8. Revit二次开发——单位转换
  9. 微信小程序文字语音转换/中英文自动翻译
  10. 使用FreeType库从ttf字库中获取点阵字库
  11. initializing of server in progress as process 4656
  12. 有赞 BI 平台设计及实现
  13. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (有上下界可行流)
  14. 交换机断网的原因分析
  15. 弹性盒子内容体居右对其_弹性盒子基本属性
  16. java linkq,TongLinkQ使用
  17. 计算机网络教育计算机统考,网络教育统考计算机复习资料 (4).doc
  18. Django学习 模型
  19. 【Stable-Diffusion-webui】No module ‘xformers‘. Proceeding without it. 问题解决方法(Windows)
  20. 不归零制编码、归零制编码、NRZI

热门文章

  1. Linux之父删除AWS工程师的补丁程序
  2. 游戏服务器引擎Matchvs游戏云第三方绑定教程
  3. 写给三年前自己的一段话
  4. 看我如何黑进邻居的电视
  5. 桌面上什么都没有了怎么调出计算机,打开电脑桌面上什么都没有,黑屏
  6. Unity3d 导入图片 自动修改Texture Type为Sprite (2D and UI) 及设置 Packing Tag为文件夹名
  7. amba_device使用分析
  8. 美联储货币政策模棱两可,非美强弱不一
  9. 电子科技20秋C语言在线作业3,电科20秋《C语言》在线作业3题目【标准答案】
  10. Python3 shebang符号