matplotlib中文显示乱码解决方法

本文介绍了在使用Matplotlib绘制决策树过程中遇到的中文显示乱码问题及其解决方案。通过查看matplotlib.font_manager下的字体名称并修改matplotlibrc文件,最终解决了中文显示问题。

原文章地址
http://brianleelxt.top/2018/07/12/plt_font/


在学习《机器学习实战》这本书的决策树一章时,要用matplotlib画出决策树,然而在显示中文时出现了乱码

import matplotlib.pyplot as plt

#定义文本框和箭头格式
decisionNode = dict(boxstyle = "sawtooth", fc = "0.8")
leafNode = dict(boxstyle = "round4", fc = "0.8")
arrow_args = dict(arrowstyle = "<-")

def plotNode(nodeTxt, centerPt, parentPt, nodeType):
    createPlot.ax1.annotate(nodeTxt, xy = parentPt, xycoords = 'axes fraction', xytext = centerPt, textcoords = 'axes fraction',\
        va = "center", ha="center", bbox = nodeType, arrowprops = arrow_args)

def createPlot():
    fig = plt.figure(1, facecolor = 'white')
    fig.clf()
    createPlot.ax1 = plt.subplot(111, frameon = False)
    plotNode('决策节点', (0.5, 0.1), (0.1, 0.5), decisionNode)
    plotNode('叶节点', (0.8, 0.1), (0.3, 0.8), leafNode)
    plt.show()

def main():
    createPlot()

main()

中文乱码

上网查了很多方法都不管用,后来发现最根本的问题是字体名字要正确。由于别人的字体我没有,且matplotlib的font_manager中的字体名与Windows系统下的字体名也不一致,导致了别人的方法对于我不适用。

后来在百般尝试下终于找到了通用的方法:

  1. 使用以下代码查看matplotlib的font_manager下的字体名字

    from matplotlib.font_manager import fontManager
    import os
    
    fonts = [font.name for font in fontManager.ttflist if 
            os.path.exists(font.fname) and os.stat(font.fname).st_size>1e6] 
    
    for font in fonts:
       print(font)

    可显示出所有字体的名字,挑选一个你要使用的中文字体

    字体名

  2. 打开F:\Anaconda\SW\Lib\site-packages\matplotlib\mpl-data下的matplotlibrc文件(路径对应个人情况)

  3. 将如图所示位置前的#去掉

    位置1

  4. 将如图所示位置前的# 去掉,且将SimHei 改为你选好的中文字体名

    位置2

  5. 将如图所示位置的True 改为False

    位置3

  6. 此时中文显示问题就解决了

    解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值