关于Ubuntu,python2.7下matplotlib绘制的图中中文无法正常显示的问题解决的总结
问题描述:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8,5), dpi=80)
x = range(1,13)
y = [month_number[i][1] for i in range(len(month_number))]
plt.bar(x, y, width=0.5 )
plt.xticks(x)
plt.title(u"我就是中文,为什么把我变成方块,难道是因为别人叫我方块字?")
如上代码所示,最后绘制出的图中title
部分是一行方块。
产生问题的原因:
这个问题产生的原因可能是以下三点:
1.matplotlib
使用了默认字体
2.没有一种合适的中文字体同时适合 ubuntu
系统和matplotlib
(matplotlib
只支持.ttf
格式的字体)
3.你虽然安装了新的字体,但matplotlib的缓存中没有记录
问题的解决方法:
一、添加如下代码:
plt.rcParams['font.sans-serif'] = ['Yahei Mono'] # 用来正常显示中文字符
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示正负号
[Yahei Mono]
这个部分写可用的中文字体的名字即可,可以在终端使用fc-list
查看当前操作系统中的字体
二、安装字体
如果添加上述代码仍然无法解决问题,说明字体有问题需要安装合适的字体
安装字体有如下方法:
1.直接在终端运行该命令:git clone https://github.com/tracyone/program_font && cd program_font && ./install.sh
然后,将安装的ttf
字体文件复制到matplotlib
的字体文件夹中(安装的ttf
文件一般在/usr/share/fonts/MyFonts/
目录下),matplotlib
的字体文件夹一般在你的Python
安装目录下的site-packages/matplotlib/mpl-data/fonts/ttf
。完整路径大致如下:/home/fanxm/Envs/cranecrm/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf
,Envs/cranecrm
是我的虚拟环境
2.从windows
上的C:\Windows\Fonts
这个目录下把字体文件拷到ubuntu
的/usr/share/fonts/MyFonts/
(MyFonts
可以自己建),然后在终端上执行fc-cache -vf
命令刷新一下系统字体缓存。同时别忘了site-packages/matplotlib/mpl-data/fonts/ttf
下也放一份。
三、清除matplotlib
的缓存
安装了新字体后一般matlibplot
是不会自己去添加到缓存的,这时需要强制matplotlib
重新建立缓存。
找到用户目录,也就是/home/username
下的.cache
目录,没找到?那是因为.
开头的文件都是隐藏文件,需要ctrl+h
才能显示出来。将.cache下的matplotlib
文件夹整个删除。当matplotlib
再次启动时发现没有缓存文件时便会自动创建。
四、修改配置文件
若以上方法仍然未能解决问题,可以尝试修改matplotlib
的配置文件,ubuntu
下通常是:site-packages/matplotlib/mpl-data/matplotlibrc
#font.family : sans-serif
#font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
将这两行的注释打开,并在font.sans-serif
中加上自己安装的字体名即可