zoukankan      html  css  js  c++  java
  • Python:matplotlib 中文乱码的解决方案

    最近手头有公司的数据资源,正好拿来练习了 matplotlib 的画图,期间碰到一个坑,就是中文在图表中显示的是方框。在查询网上各种资料并实践后,我分享一下我试验成功的解决方案。

    本文针对 Mac 系统,其他系统也可参考本文。

    原因

    出现中文乱码是因为 matplotlib 库中没有中文字体,所以显示出来的不像是真正的乱码,而是都为方框。

    解决方法

    1)在终端中根据个人需求启动 python 或 python3,或者直接打开相应的 Python Launcher,执行以下两句。

    import matplotlib
    matplotlib.matplotlib_fname()

    得到的结果就是 matplotlib 包所在的文件夹位置,我得到的路径是 '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc',截图如下。(mac 以外的系统得到的路径差别会很大)

    2)进入上一步得到的路径,打开 matplotlibrc 配置文件,找到以 #font.sans-serif 开头的那一行,去掉#,并添加 SimHei 在该参数中(如下图)。字体也可以改成别的。网上有些文章中是把 SimHei 放在参数最后,我开始也是放在最后的,没有解决问题,放到最前面就解决了问题。

    3)在网上下载需要添加的字体的 ttf 文件,SimHei 的下载地址:https://www.fontpalace.com/font-details/SimHei/。下载后将文件放置在 matplotlib 包文件夹下的 /fonts/ttf 中(也就是前面matplotlibrc 配置文件所在的文件夹的 /fonts/ttf 中)。

    完成这些后应该就能解决问题了。

    mac 之外的系统做到这儿时可能还不能解决问题,我看到有一个帖子提到的方法或许可以解决问题(https://www.zhihu.com/question/25404709/answer/309784195 ),顺便分享一下。

    改了配置之后并不会生效,需要重新加载字体,在Python中运行如下代码即可:

    from matplotlib.font_manager import _rebuild

    _rebuild() #reload一下

     

    参考资料

    https://segmentfault.com/a/1190000005144275

  • 相关阅读:
    cholesky分解
    LU分解(2)
    LU分解(1)
    自定义UITableView的Seperator
    iOS屏蔽高频点击技巧
    iOS动态管理AutoLayout的约束NSLayoutConstraint
    Reachability几个常用方法
    XCode4 下制作Framework的方法
    StoryBoard 的使用
    Objective-C RunTime
  • 原文地址:https://www.cnblogs.com/zhenqichai/p/matplotlib-cannot-show-chinese.html
Copyright © 2011-2022 走看看