最近因為論文原因在學習機器學習,看的一本叫做《機器學習實戰》的書,看了看還是不錯的,因為其中既有原理又有實例。今天載使用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}\n"', shell=True) # print '*' * 10, '系統可用的中文字體', '*' * 10 # print output zh_fonts = set(f.split(',', 1)[0] for f in output.split('\n')) available = mat_fonts & zh_fonts print '*' * 10, '可用的字體', '*' * 10 for f in available: print f
我運行之后,發現說是"import Error:no module named font_manage"錯誤,之后經過一頓的搜索與嘗試,發現如下方法可以解決這個問題:使用windows下的字體,講C:\windows\fonts文件夾下的所有以.ttf結尾的文件拷貝到/usr/share/fonts/truetype目錄下,並將所有的ttf文件的權限修改所有人可以讀。
2. 配置matplotlibrc文件
修改matplotlibrc文件(查詢該文件的方法:進入root跟目錄下,運行find -name matplotlibrc),修改為如下:
font.family : serif
font.serif : {zh_family}, serif
其中{zh_family}就是1中所得到的可用字體。