欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matplotlib中文显示乱码解决方法

程序员文章站 2022-07-14 19:21:40
...

原文章地址
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中文显示乱码解决方法

上网查了很多方法都不管用,后来发现最根本的问题是字体名字要正确。由于别人的字体我没有,且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)

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

    matplotlib中文显示乱码解决方法

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

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

    matplotlib中文显示乱码解决方法

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

    matplotlib中文显示乱码解决方法

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

    matplotlib中文显示乱码解决方法

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

    matplotlib中文显示乱码解决方法

相关标签: python Matplotlib