前言:
在ubuntu16.04中使用python的matplotlib
模块进行科学制图时,在输出图例或者标题的时候出现中文乱码问题:
解决:
- 下载字体:msyh.ttf (微软雅黑),放在系统字体文件夹下: /usr/share/fonts
同时我也复制了下放在matplotlib的字体文件夹下了(不知道这一步是不是必须)
/usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/fonts/ttf/
修改matplotlib配置文件:
sudo vim /usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/matplotlibrc
删除font.family和font.sans-serif两行前的#,并在font.sans-serif后添加中文字体
Microsoft YaHei, ...(其余不变)删除~/.cache/matplotlib下文件fontList.py3k.cache
重启python即可
注意:在我修改完成后还需要在代码里加入:
import maplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 显示中文不乱码
plt.rcParams['axes.unicode_minus'] = False # 显示负数不乱码
另外:可以执行下这段程序--可以打印出可用的字体:
#! /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)
再补充一个win10的:
python3.6
- 找到matplotlib 配置文件:
import matplotlib
print(matplotlib.matplotlib_fname())
# 我自己的输出结果如下:
# D:\Program Files\Python36\Lib\site-packages\matplotlib\mpl-data
2. 编辑器打开此文件 matplotlibrc
删除font.family和font.sans-serif两行前的#,并在font.sans-serif后添加微软雅黑字体Microsoft YaHei
3. 下载字体:msyh.ttf (微软雅黑)
放在matplotlib 字体文件夹下:
# D:\Program Files\Python36\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
4. 删除.matplotlib/cache里面的两个缓存字体文件
C:\Users\你的用户名\.matplotlib
<noscript><img src="https://pic4.zhimg.com/50/v2-92f9f704ea4e9f440b57d3074da29db4_hd.jpg" data-rawwidth="254" data-rawheight="56" class="content_image" width="254"/></noscript>
5. 重启Python
作者:司毅
链接:https://www.zhihu.com/question/25404709/answer/128171562
来源:知乎
更多内容可关注本人博客:老香椿(https://laoxiangchun.cn/)