美文网首页
matplotlib中文乱码问题

matplotlib中文乱码问题

作者: wanncy | 来源:发表于2019-06-08 00:03 被阅读0次

    前言:
    在ubuntu16.04中使用python的matplotlib模块进行科学制图时,在输出图例或者标题的时候出现中文乱码问题:

    解决:

    • 下载字体:msyh.ttf (微软雅黑),放在系统字体文件夹下: /usr/share/fonts

    同时我也复制了下放在matplotlib的字体文件夹下了(不知道这一步是不是必须)
    /usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/fonts/ttf/

    • 修改matplotlib配置文件:
      sudo vim /usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/matplotlibrc
      删除font.family和font.sans-serif两行前的#,并在font.sans-serif后添加中文字体
      Microsoft YaHei, ...(其余不变)

    • 删除~/.cache/matplotlib下文件fontList.py3k.cache

    重启python即可

    注意:在我修改完成后还需要在代码里加入:

    import maplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']  #   显示中文不乱码
    plt.rcParams['axes.unicode_minus'] = False  #   显示负数不乱码
    

    另外:可以执行下这段程序--可以打印出可用的字体:

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    from matplotlib.font_manager import FontManager
    import subprocess
    
    fm = FontManager()
    mat_fonts = set(f.name for f in fm.ttflist)
    #print(mat_fonts)
    output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True)
    #print( '*' * 10, '系统可用的中文字体', '*' * 10)
    #print (output)
    zh_fonts = set(f.split(',', 1)[0] for f in output.decode('utf-8').split('\n'))
    available = mat_fonts & zh_fonts
    print ('*' * 10, '可用的字体', '*' * 10)
    for f in available:
         print (f)
    

    再补充一个win10的:

    python3.6

    1. 找到matplotlib 配置文件:
    import matplotlib 
    print(matplotlib.matplotlib_fname()) 
    # 我自己的输出结果如下:
    # D:\Program Files\Python36\Lib\site-packages\matplotlib\mpl-data
    

    2. 编辑器打开此文件 matplotlibrc

    删除font.family和font.sans-serif两行前的#,并在font.sans-serif后添加微软雅黑字体Microsoft YaHei

    3. 下载字体:msyh.ttf (微软雅黑)
    放在matplotlib 字体文件夹下:

    # D:\Program Files\Python36\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
    

    4. 删除.matplotlib/cache里面的两个缓存字体文件

    C:\Users\你的用户名\.matplotlib
    

    <noscript><img src="https://pic4.zhimg.com/50/v2-92f9f704ea4e9f440b57d3074da29db4_hd.jpg" data-rawwidth="254" data-rawheight="56" class="content_image" width="254"/></noscript>

    image

    5. 重启Python

    作者:司毅
    链接:https://www.zhihu.com/question/25404709/answer/128171562
    来源:知乎

    相关文章

      网友评论

          本文标题:matplotlib中文乱码问题

          本文链接:https://www.haomeiwen.com/subject/ydjbxctx.html