python graphviz中文乱码_graphviz画决策树图中文乱码问题终极解决方案
大家在画决策树的过程中,一定非常希望能画出带有中文特征名称或类别名称的决策树。但我们直接用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画决策树图中文乱码问题终极解决方案相关推荐
- 一行代码解决graphviz画决策树图中文乱码问题(附带参数介绍)
若我们的直接写这样的代码 feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类', '花青素', '颜色强度','色调','od28 ...
- python导入Graphviz库-画决策树图
学习决策树时,发现如果要用python画决策树,python需要导入Graphviz库,看了几篇csdn,发现个别文章不是很全,会出错误,这里简单记录下完整过程. 文章目录 0.下载Graphviz- ...
- python中文字体奇怪_python中文编码(汉字乱码问题解决方案)
Python脚本对英语字母是非常友好的,但对中文就不是了.我们用 Python 输出 "Hello, how are you!",英文没有问题,但是如果你输出中文字符 " ...
- matplotlib画折线图中文乱码解决
说到底,乱码的原因是因为没有安装中文字体导致的,所以首先要做的就是安装一个中文字体. 报表中发现有中文乱码和中文字体不整齐(重叠)的情况,首先考虑的就是操作系统是否有中文字体,在CentOS 7中发现 ...
- 怎样用python生成中文字符画_如何利用Python实现图片转字符画详解
本篇文章主要介绍了Python实现图片转字符画的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 字符画真的很有意思,将图片中的像素用字符代替,就生成了字符画. 但是像 ...
- 《机器学习》西瓜书课后习题4.3——python实现基于信息熵划分的决策树算法(简单、全面)
<机器学习>西瓜书课后习题4.3--python实现基于信息熵划分的决策树算法 <机器学习>西瓜书P93 4.3 试编程实现基于信息熵进行划分选择的决策树算法,并为表4.3中数 ...
- php mysql存中文,PHP+MySQL存储数据常见中文乱码问题小结
PHP+MySQL存储数据常见中文乱码问题小结 本文实例总结了PHP+MySQL存储数据常见中文乱码问题.分享给大家供大家参考,具体如下: PHP+MySQL出现中文乱码的常见原因: 1. MYSQL ...
- python读取文件路径乱码 linux_Python之pandas读写文件乱码的解决方法
Python之pandas读写文件乱码的解决方法 python读写文件有时候会出现 'XXX'编码不能打开XXX什么的,用记事本打开要读取的文件,另存为UTF-8编码,然后再用py去读应该可以了.如果 ...
- 如何解决oracle中文乱码问题,oracle中解决中文乱码问题
中文乱码问题解决 1.查看服务器端编码 select userenv('language') from dual; 查到结果是: USERENV('LANGUAGE') --------------- ...
最新文章
- WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】
- 灰度重采样(Gray Resampling
- B站发布2020年一季度财报:月活用户达1.72亿,日活用户突破5000万
- WebSocket使用,包括服务端和客户端(JAVA实现)
- 今天心情好,发首我喜欢的歌---天黑黑
- 【机器学习】算法调参
- ZooKeeper原生java客户端使用
- Revit二次开发——单位转换
- 微信小程序文字语音转换/中英文自动翻译
- 使用FreeType库从ttf字库中获取点阵字库
- initializing of server in progress as process 4656
- 有赞 BI 平台设计及实现
- ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (有上下界可行流)
- 交换机断网的原因分析
- 弹性盒子内容体居右对其_弹性盒子基本属性
- java linkq,TongLinkQ使用
- 计算机网络教育计算机统考,网络教育统考计算机复习资料 (4).doc
- Django学习 模型
- 【Stable-Diffusion-webui】No module ‘xformers‘. Proceeding without it. 问题解决方法(Windows)
- 不归零制编码、归零制编码、NRZI
热门文章
- Linux之父删除AWS工程师的补丁程序
- 游戏服务器引擎Matchvs游戏云第三方绑定教程
- 写给三年前自己的一段话
- 看我如何黑进邻居的电视
- 桌面上什么都没有了怎么调出计算机,打开电脑桌面上什么都没有,黑屏
- Unity3d 导入图片 自动修改Texture Type为Sprite (2D and UI) 及设置 Packing Tag为文件夹名
- amba_device使用分析
- 美联储货币政策模棱两可,非美强弱不一
- 电子科技20秋C语言在线作业3,电科20秋《C语言》在线作业3题目【标准答案】
- Python3 shebang符号