Mac和Windows下如何令matplotlib支持中文

matplotlib支持中文:

注意事项:

在修改完字体选项后,集合把cache给删除

1
rm -rf ~/.matplotlib/*.cache

最简单的方法(大众字体):

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib
font = {
'family':'STFangsong'
}
axes = {
'unicode_minus':False
}
matplotlib.rc('font',**font)
matplotlib.rc('axes',**axes)
------或者
matplotlib.rcParams['font.family'] = 'STFangsong'#解决字体问题
matplotlib.rcParams['axes.unicode_minus'] = False #解决符号问题

但是这样方法,有个弊端就是使用的字体有限

  • 在ipython下:只能使用这个列表显示的字体,我们电脑字库中存在的字体是不能使用的,会显示没有此字体
1
2
import matplotlib
sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])
  • 在普通IDE环境下:可以使用我们的电脑字库的字体来显示,但是无法进行保存(保存后文字变为方格)

偶尔一用(小众字体):

这种方法没有任何限制,所有平台字体都可以使用(可能显示的字体不对,但是保存的图片的字体正确)

1
2
3
4
5
6
7
8
9
10
11
12
13
#首先导入需要的matplotlib.font_manager包
from matplotlib.font_manager import *
#设定好我们的小众字体,后面的PATH就是你电脑中字体的位置
myfont = FontProperties(fname='/Users/fplee/Library/Fonts/方正清刻本悦宋简体.TTF')
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0,10)
y = np.sin(x)
#然后再需要用的地方,就可以这样调用fontproperties=myfont
plt.title('你好',fontproperties=myfont)
plt.plot(x,y, label = '测试')
plt.legend(prop=myfont)
plt.show()

比较麻烦的方法:

首先获得matplotlib的包位置

1
2
3
import matplotlib
matplotlib.matplotlib_fname() #将会获得matplotlib包所在文件夹
#比如我的是:/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc

然后打开matplotlib.matplotlib_fname()地址的上一个文件夹

1
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/mpl-data/

发现里面的fonts文件夹,将你需要的字体拷贝进这个文件夹里的一个中,修改为一个这个文件夹中存在的名字,然后相当于替换掉他。

然后再使用如下,就可以了,亲测可行

1
matplotlib.rcParams['font.family'] = '替换的名字'#解决字体问题

下面是转载:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
我也是试了各种方法,最后终于弄好了下载字体文件,比如 我下载的 wqy-microhei.ttc将字体文件放到matplotlib包的的fonts的目录下,比如我的 anaconda3/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/
3. 运行ipython 中的matplotlib,输入 import matplotlib
sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])
查看你的字体文件在fontManager中的注册的名字,比如:wqy-microhei.ttc 在ttflist中的key是 WenQuanYi Micro Hei4. 修改你的matplotlib的配置文件matplotlibrc,比如我的是:anaconda3/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc
找到:#font.family : sans-serif
#font.style : normal
#font.variant : normal
#font.weight : medium
#font.stretch : normal
这一部分,将#font.family : sans-serif 修改为 font.family : WenQuanYi Micro Hei
注意注释#号要去掉,修改的名字必须是ttflist里有的key,修改为wqy-microhei会提示找不到字体或者不修改配置文件,直接指定rcParams也行 :import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.family'] = 'WenQuanYi Micro Hei'
5. 测试:import matplotlib
import matplotlib.pyplot as plt
plt.figure()
plt.title("哈哈")
plt.show()