欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于Ubuntu,python2.7下matplotlib绘制的图中中文无法正常显示的问题解决的总结

程序员文章站 2022-03-19 09:48:27
...

问题描述:

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