美文网首页
matplotlib中文字体显示的问题

matplotlib中文字体显示的问题

作者: alan2yang | 来源:发表于2018-08-20 21:58 被阅读297次

    1.matplotlib默认字体不支持中文显示,图表中的中文会出现乱码

    2.动态配置matplotlib是一个比较麻烦的做法,这里不再提,网上有很多教程
    比如可以这样

    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']
    

    3.一劳永逸的做法是修改matplotlib的配置文件matplotlibrc

    想查看当前工作的matplotlibrc文件是哪个,你可以使用下面的方式查看:

    # python环境下
    >>> import matplotlib
    >>> matplotlib.matplotlib_fname()
    

    使用sublime打开该配置文件,查找到

    # font.sans-serif     :  DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
    

    配置文件中语句基本上全部被注释掉了,要启动配置需要去掉前面的#;这里是默认的字体列表,当然,不支持中文

    所以需要写上支持中文的字体,但不能随便添加,有个前提:必须是matplotlib字体库中存在的或本机安装的字体

    matplotlib的字体库路径如下:
    D:\Anaconda\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

    我的是基于Anaconda的,只要你找到了matplotlibrc,在它的同级目录下就是fonts文件夹

    进入ttf文件夹后可以看到所有的字体文件均为.ttf格式,这意味着本机安装的字体只有是.ttf格式的才能使用,像win10里面的.ttc格式的字体是无法使用的

    我从win7上考了个msyh.ttf即微软雅黑,放到该目录下,并右键安装

    然后找到C:\Users\admin\.matplotlib文件夹下的fontList.*文件,只要前缀一致都删掉,缓存文件,删了没什么影响(如果怕,剪切一下也行),然后运行含有matplotlib的程序,等待新生成的缓存文件

    缓存文件出来后,打开查看要使用的字体信息

        {
          "fname": "D:\\Anaconda\\lib\\site-packages\\matplotlib\\mpl-data\\fonts\\ttf\\MSYH.ttf",
          "name": "Microsoft YaHei",
          "style": "normal",
          "variant": "normal",
          "weight": 400,
          "stretch": "normal",
          "size": "scalable",
          "_class": "FontEntry"
        },
    

    这里的msyh.ttf对应的name为Microsoft YaHei,这就是我们要在matplotlibrc文件中要写入的字体名,修改font.sans-serif如下即可:

    font.sans-serif     : Microsoft YaHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
    

    重启程序或者使用jupyter时restart the kernel,再运行即可

    其他字体参考以上

    参考资源:
    1.我们来解决一下 matplotlib 的中文显示问题
    2.无名英雄

    相关文章

      网友评论

          本文标题:matplotlib中文字体显示的问题

          本文链接:https://www.haomeiwen.com/subject/dnkriftx.html