• [matplotlib] Mac中文显示乱码


    [matplotlib] Mac中文显示乱码

    matplotlib绘图,中文是解码后自动输出,而不是写死的,所以通过FontManager指定本机中文字体目录的办法并不奏效。尝试了N多办法,被折磨了N久,放弃了N次,就在准备弃疗的时候,中文终于显示正常了。分享如下:

    1.找到matplotlib 安装的目录

    python
    import matplotlib
    print(matplotlib.matplotlib_fname()) 
    >> /Applications/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
    

    2.修改matplotlibrc文件

    删除font.family和font.sans-serif两行前的#,并在font.sans-serif后添加对应的中文字体。这里我们用的是中文简体 SimHei,如下:

    font.family          :sans-serif
    font.sans-serif     : SimHei, DejaVu Serif(后面还有很多,略去)
    axes.unicode_minus,将True改为False
    

    3.将对应的字体SimHei.tff拷贝到

    /Applications/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
    

    4.清空缓存
    这一步很重要!否则其他几步都是白忙活。一定要清空matlibplot加载字体的缓存,因为加载字体的时候要读取FontList文件,我们新加入的字体不在这个文件的列表,加载时必然会报找不到字体的错:

    UserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to Bitstream Vera Sans
      (prop.get_family(), self.defaultFamily[fontext]))
    

    有些博客上写的是FontList.cache,Mac机器上没有FontList.cache文件,但是有一个FontList.json文件,打开后发现,这个文件详细记录了matplotlib加载字体的名称、路径。

    rm -rf /Users/lqhk/.matplotlib/FontList.json  # 删除即可
    

    下次调用matplotlib时,会自动生成一个新的json文件。

    5.修改代码。

    import matplotlib.pyplot as plt # 引入matplotlib包
    plt.rcParams['font.sans-serif']=['SimHei']# 设置加载的字体名
    plt.rcParams['axes.unicode_minus']=False #解决保存图像是负号'-'显示为方块的问题
    

    有中文的地方记得,前面加u,如:

    plt.title(u'这是题目 ')
    
  • 相关阅读:
    【软剑攻城队】团队介绍发布!
    【软剑攻城队】团队简介
    耿丹计科16-1大家庭
    便捷从使用git开始
    交流从选择coding.net开始
    相识从C语言开始
    川师2016上半年软件工程助教总结
    2016年川师大软件工程本科生博客地址列表
    川师大研究生2015级现代软件工程(2016春)
    SVN:Cleanup failed to process the following paths
  • 原文地址:https://www.cnblogs.com/ryxiong-blog/p/12656952.html
Copyright © 2020-2023  润新知