1. 查看matplotlib支持的中文字体
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from matplotlib.font_manager import FontManager
    import subprocess
    fm = FontManager()
    mat_fonts = set(f.name for f in fm.ttflist)
    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 str(output).split('\n'))
    available = mat_fonts & zh_fonts
    print '*' * 10, '可用的字体', '*' * 10
    for f in available:
    print f
发现为空,所以绘图的时候中文才会用框框代替。
  1. 下载SimHei字体,并将其修改为SimHei.ttf,特别文件后缀名,下载的可能是TTF,否则后面无法识别。
  2. 将字体文件拷贝到matplotlib字体文件目录下matplotlib/mpl-data/fonts/ttf,可以通过下面命令来查找相应目录。

    1
    locate -b './mpl-data'
  3. 修改配置文件matplotlibrc。通过以下命令查找该文件目录。

    1
    find -name matplotlibrc

    去掉以下三列前面的#,并将SimHei添加到font.sans-serif 前面

    1
    2
    3
    4
    #font.family         : sans-serif        
    #font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
    ...
    #axes.unicode_minus : False #解决负号'-'显示为方块的问题
  4. 删除缓存

    1
    rm -rf ~/.cache/matplotlib/