Ubuntu下matplotlib的中文显示

真真地被matplotlib的中文显示折磨的不行了。简要记下解决方案,防止以后重新配又是蛋疼菊紧。

我的环境:系统是Ubuntu 13.04,Python是系统自带的,matplotlib是apt安装的。中文字体以前有装过。

首先是编码问题

在Python代码的第二行加上编码声明(编码声明可以放在第一行或者第二行,但是第一行放shebang了):

# -*- coding:utf-8 -*-

顺便记一下在Emacs下如何查看当前编码:

M-x describe-coding-system

然后是字体问题

将/etc/matplotlibrc复制到~/.matplotlibrc/。如果配坏了就删了~/.matplotlibrc/matplotlibrc重来。

在matplotlibrc里配置字体:

font.family: sans-serif
font.sans-serif: WenQuanYi Micro Hei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

添加了文泉驿微米黑的中文字体。运行程序,仍然是方块- -

查看系统有没有文泉驿微米黑字体:

fc-list | grep WenQuanYi

有这个字体:/usr/share/fonts/truetype/wqy/wqy-microhei.ttc: WenQuanYi Micro Hei,文泉驛微米黑,文泉驿微米黑:style=Regular

再查看matplotlib找到了这个字体没:

cat ~/.matplotlib/fontList.cache | grep WenQuanYi

没有……

--------------------------------

猜测原因:matplotlib查找系统字体的时候不匹配ttc字体文件。

cat ~/.matplotlib/fontList.cache | grep '.ttc'

没有输出。

解决方法一

暴力方法,直接把ttc字体改成ttf字体:

sudo cp wqymicrohei.ttc wqymicrohei.ttf

删除字体缓存fontList.cache,重新运行,可以显示中文了。但是保存成eps图片出错:TrueType font is missing table。因为那个ttf根本就不是ttf文件……

解决方法二

找个在线转换网站将ttc字体文件转成ttf文件。这个是我用的网站:http://www.files-conversion.com/font-converter.php

将转换后得到的ttf文件拷到/usr/share/fonts下。删除fontList.cache,重新运行,可以显示中文,也能保存eps图片了。

终极解决方案应该是让matplotlib能自动载入ttc字体文件,但是没搜到怎么配置。有没有朋友知道怎么弄的分享下?

Linux下的软件中文支持仍是个问题啊。

原文地址:https://www.cnblogs.com/skabyy/p/3461229.html