解决Linux下plt不能显示中文的问题

在ubuntu中安装中文字体

1、先从你本机 C:\Windows\Fonts 拷贝或者网络上下载你想要安装的字体文件(*.ttf文件)到/usr/share/fonts/zh_CN 目录下(如果系统中没有此目录,则自行mkdir创建,亦可重命名为自己喜欢的文件夹名。如果是ttc文件,请改后缀为ttf)

2、修改字体文件的权限,使root用户以外的用户也可以使用

cd /usr/share/fonts/chinese/TrueType
chmod 755 *.ttf

3、建立字体缓存

mkfontscale (如果提示 mkfontscale: command not found,则需要安装sudo apt-get install ttf-mscorefonts-installer)
mkfontdir
fc-cache -fv (如果提示 fc-cache: command not found,则需要安装sudo apt-get install fontconfig)

PLT设置中文字体

  • 删除~/.cache/matplotlib下文件fontList.py3k.cache
    如果不删除,可能会出现如下错误
font family ['serif'] not found. Falling back to DejaVu Sans
  • 代码中添加如下部分
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
  • 重启python即可

实际上,有两种方法告诉 matplotlib 使用这些字体:

  1. 在 matplotlibrc 中,添加像这样的一行,把中文字体作为第一顺序选用的字体。
font.sans-serif : WenQuanYi Micro Hei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
  1. 在程序文件开头,指定字体:
import matplotlib
matplotlib.rcParams['font.sans-serif'] = 'WenQuanYi Micro Hei'

第2种方法很灵活,可以针对每个文件单独设置。如果使用第1种方法,建议把 matplotlibrc 放在当前工作目录下,不要作为全局配置。

附:打印出可用的字体

#! /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)

微软雅黑下载地址:msyh.ttf

你可能感兴趣的:(解决Linux下plt不能显示中文的问题)