解决问题,在pycharm中使用graphviz绘制决策树时,决策树图片中不显示中文(中文字体乱码!!) 图文并茂版!!!

Posted 温柔且上进c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决问题,在pycharm中使用graphviz绘制决策树时,决策树图片中不显示中文(中文字体乱码!!) 图文并茂版!!!相关的知识,希望对你有一定的参考价值。

问题信息

       •我们在pycharm中使用graphviz绘制决策树时,可能会出现下述图片中中文字体乱码的问题:

       •参考网上修改各种配置文件的方法,一般是不能解决问题的!,此博客介绍一种不修改配置文件的方法解决此问题!!

问题代码

import graphviz
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split

wine = load_wine()

Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target, test_size=0.3)

clf = tree.DecisionTreeClassifier(criterion='entropy'
                                  ,random_state=30
                                  ,splitter='random')
# random_state随机模式可输入任意数字,
cl = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
print(score)

feature_name = ['酒精', '苹果酸', '灰', '灰的碱性', '镁', '总酚', '类黄酮', '非黄烷类酚类', '花青素', '颜色强度', '色调', 'od280/od315稀释葡萄酒',
                '脯氨酸']  # 特征值
dot_data = tree.export_graphviz(
    clf,
    feature_names=feature_name,
    class_names=['琴酒', '雪梨', '贝尔摩德'],
    filled=True,  # 是否填充颜色,true 填充颜色
    rounded=True,  # 框的形状
)
graph = graphviz.Source(dot_data)  # 此行代码出现问题!!!
graph.render('wine_tree')

       •当你使用上述代码绘制决策树时,就会出现图片中中文字体乱码的情况!!

问题分析

       •出现问题的代码行!!!

graph = graphviz.Source(dot_data)  

       •在不修改dot_data字体配置时,绘制图像的字体为:fontname = helvetica,此字体为西文字体,不支持中文字体,当我们直接使用而不修改字体配置时,就会出现图片中中文字体乱码的情况!!!

解决问题

       •出现上述问题时,只需增加中文字体的配置即可解决中文乱码问题!!

graph = graphviz.Source(dot_data.replace('helvetica', '"Microsoft YaHei"'), encoding='utf-8')  

       •将上述问题代码行修改为此代码行即可解决!!!

注意

       •’“Microsoft YaHei”’ 这里是单引号里面套着双引号,不能出现书写错误!!!
       •完整正确代码:

import graphviz
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split

wine = load_wine()

Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target, test_size=0.3)

clf = tree.DecisionTreeClassifier(criterion='entropy'
                                  ,random_state=30
                                  ,splitter='random')
# random_state随机模式可输入任意数字,
cl = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
print(score)

feature_name = ['酒精', '苹果酸', '灰', '灰的碱性', '镁', '总酚', '类黄酮', '非黄烷类酚类', '花青素', '颜色强度', '色调', 'od280/od315稀释葡萄酒',
                '脯氨酸']  # 特征值
dot_data = tree.export_graphviz(
    clf,
    feature_names=feature_name,
    class_names=['琴酒', '雪梨', '贝尔摩德'],
    filled=True,  # 是否填充颜色,true 填充颜色
    rounded=True,  # 框的形状
)
graph = graphviz.Source(dot_data.replace('helvetica', '"Microsoft YaHei"'), encoding='utf-8')
graph.render('wine_tree')

       •解决问题后图片显示:

以上是关于解决问题,在pycharm中使用graphviz绘制决策树时,决策树图片中不显示中文(中文字体乱码!!) 图文并茂版!!!的主要内容,如果未能解决你的问题,请参考以下文章

Python 决策树 GraphViz

PyCharm 2016无法识别graphviz包2.38.xxx

Mac 安装 graphviz

PyCharm TensorFlow Plot_model 无法工作

python中导入graphviz模块失败的解决办法

Graphviz 可视化图形软件(python)