matplotlib中文乱码问题

前言:
在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

  1. 找到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

image

5. 重启Python

作者:司毅
链接:https://www.zhihu.com/question/25404709/answer/128171562
来源:知乎

更多内容可关注本人博客:老香椿(https://laoxiangchun.cn/)

你可能感兴趣的:(matplotlib中文乱码问题)