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

"在PyCharm中使用Graphviz和sklearn库绘制决策树时,可能出现中文字体乱码。通过不修改配置文件,而是直接在代码中替换字体为'微软 YaHei',可以有效解决这个问题。具体解决方法是在创建graphviz.Source时,将'fontname=helvetica'替换为'"MicrosoftYaHei"', 并确保编码为'utf-8',这样就能正常显示中文了。"

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题信息

       •我们在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')

       •解决问题后图片显示:
在这里插入图片描述

评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值