zoukankan      html  css  js  c++  java
  • ubuntu下matplotlib画图中文乱码问题

      最近因为论文原因在学习机器学习,看的一本叫做《机器学习实战》的书,看了看还是不错的,因为其中既有原理又有实例。今天载使用matplotlib进行画图时,发现中文会显示为小方块,这个问题真是神烦,折腾了一下午,终于搞定了,下面记录一下我解决的过程。

        1. 查看matplotlib支持的中文字体

        用python运行以下代码:

    #! /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)
    
    output = subprocess.check_output(
        'fc-list :lang=zh -f "%{family}
    "', shell=True)
    # print '*' * 10, '系统可用的中文字体', '*' * 10
    # print output
    zh_fonts = set(f.split(',', 1)[0] for f in output.split('
    '))
    available = mat_fonts & zh_fonts
    
    print '*' * 10, '可用的字体', '*' * 10
    for f in available:
        print f

         我运行之后,发现说是"import Error:no module named font_manage"错误,之后经过一顿的搜索与尝试,发现如下方法可以解决这个问题:使用windows下的字体,讲C:windowsfonts文件夹下的所有以.ttf结尾的文件拷贝到/usr/share/fonts/truetype目录下,并将所有的ttf文件的权限修改所有人可以读。

        2. 配置matplotlibrc文件

        修改matplotlibrc文件(查询该文件的方法:进入root跟目录下,运行find -name matplotlibrc),修改为如下:

    font.family         : serif
    font.serif : {zh_family}, serif

        其中{zh_family}就是1中所得到的可用字体。

        参考资料

        【1】http://segmentfault.com/blog/defool/1190000000621721

        【2】http://www.zeuux.com/group/scipython/bbs/content/6270/

  • 相关阅读:
    unity panel删除drawcall失败导致的残留影像
    c# List的排序
    动画播放一段就禁用
    delegate用法
    ctrl+alt+end 修改桌面密码
    Windows 下curl htpps
    Linux下端口映射工具rinetd
    Linux系统下强制踢掉登录用户
    linux ls 按文件大小排序
    chrome的功能Copy as cURL
  • 原文地址:https://www.cnblogs.com/ningvsban/p/4345178.html
Copyright © 2011-2022 走看看