zoukankan      html  css  js  c++  java
  • matplotlib中文显示乱码解决方法

    在学习《机器学习实战》这本书的决策树一章时,要用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:AnacondaSWLibsite-packagesmatplotlibmpl-data下的matplotlibrc文件(路径对应个人情况)

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

      位置1

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

      位置2

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

      位置3

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

      解决

  • 相关阅读:
    think in java
    TASLock TTASLock
    多线程
    jenkins unable to delete file
    ubuntu sun-jdk
    py2exe
    memcached安装
    redis安装
    ubuntu安装ssh
    mysql远程访问
  • 原文地址:https://www.cnblogs.com/brianleelxt/p/13200106.html
Copyright © 2011-2022 走看看