Ubuntu下Python绘图中文显示乱码
- 查看matplotlib支持的中文字体
1
2
3
4
5
6
7
8
9
10
11
12
13from 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
发现为空,所以绘图的时候中文才会用框框代替。
- 下载SimHei字体,并将其修改为SimHei.ttf,特别文件后缀名,下载的可能是TTF,否则后面无法识别。
将字体文件拷贝到matplotlib字体文件目录下matplotlib/mpl-data/fonts/ttf,可以通过下面命令来查找相应目录。
1
locate -b './mpl-data'
修改配置文件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 #解决负号'-'显示为方块的问题删除缓存
1
rm -rf ~/.cache/matplotlib/