关于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中加上自己安装的字体名即可

猜你喜欢

转载自www.cnblogs.com/fxm1/p/11544239.html