美文网首页
matplotlib 解决中文乱码

matplotlib 解决中文乱码

作者: Helen_Cat | 来源:发表于2019-02-14 08:50 被阅读4次

    matplotlib 如果在mac 上普通安装安装一般中文没有问题,
    但是matplot 如果安装在centos 7 并使用anaconda 安装的 中文一般就有问题

    原因: centos7缺少 相应的中文字库
    matplotlib 也缺少相应的中文字库
    解决方法:

    1. 每次编码配置
    #coding:utf-8
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    #有中文出现的情况,需要u'内容'
    

    需要看看 我在科赛 看到人家明明支持 微软雅黑,matplotlib 中文正常 seaborn 乱码

    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体设置-黑体
    plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
    sns.set(font='Microsoft YaHei')  # 解决Seaborn中文显示问题
    

    不过在我这里失败了。。

    [2]. 添加字库文件,配置字库路径,刷新 ,并在编码中配置

    import matplotlib
    from matplotlib.font_manager import *
    matplotlib.rcParams['axes.unicode_minus']=False
    font_rc = {'family': 'WenQuanYi Zen Hei Mono',
               'weight': 'normal',
               'size'  : 22}
    matplotlib.rc('font', **font_rc)
    

    参考: https://www.jianshu.com/p/7b7a3e73ef21

    1. 下载字库文件
      http://font.chinaz.com/130130474870.htm

    建议自己先解压好,然后再上传到服务器 上

    1. 配置centos7 安装字库 文件 刷新 识别
      在 /usr/share/fonts 路径下创建存放此字体的文件夹yourfontdir,并下载的ttf文件复制到yourfontdir中(可以给文件改个英文名,方便操作)
      我改成了 mullerfont.ttf
    sudo -s
    cd /usr/share/fonts/
    mkdir yifont
    cd yifont
    #生成字体索引信息. 会显示字体的font-family
    sudo mkfontscale     ## 必须有这步!!
    sudo mkfontdir    ## 必须有这步!! 否则matplot还是识别不到
    #更新字体缓存:  ## 必须有这步!!
    fc-cache
    
    fc-list |grep mullerfont
     ## /usr/share/fonts/muller/mullerfont.ttf: WenQuanYi Zen Hei Mono:style=Medium
    

    3.找到 matplotlib 的路径 并修改 其配置文件 ,并删除matplot 缓存

    查看 matplot 支持的字体

    from matplotlib.font_manager import FontManager
    import subprocess
    
    fm = FontManager()
    mat_fonts = set(f.name for f in fm.ttflist)
    mat_fonts
    
    import matplotlib
    matplotlib.matplotlib_fname()
    ### '/root/miniconda3/envs/condaEnv/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc'
    
    cd /root/miniconda3/envs/condaEnv/lib/python3.6/site-packages/matplotlib/mpl-data/
    vi  matplotlibrc
    
    ###剩下的比较关键 ,修改成这个样子,有一个事情我不确定  这个配置文件单个# 好像不是注释,##应该是注释
    #font.family         : sans-serif
    font.serif          : DejaVu Serif, WenQuanYi Zen Hei Mono, ....##添加WenQuanYi Zen Hei Mono字体声明
    
    font.sans-serif     : DejaVu Sans, WenQuanYi Zen Hei Mono,   ....##添加WenQuanYi Zen Hei Mono字体声明
    
    axes.unicode_minus  : False ## 322 line
    

    然后把 新添加的字体copy到matplot的字体文件目录中,以你实际目录为准

    cd /root/miniconda3/envs/condaEnv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
    
    cp /usr/share/fonts/muller/mullerfont.ttf ./
    
    并删除相关cache
    rm -rf ~/.cache/matplotlib
    

    然后再代码中声明

    import matplotlib
    from matplotlib.font_manager import *
    matplotlib.rcParams['axes.unicode_minus']=False
    font_rc = {'family': 'WenQuanYi Zen Hei Mono',
               'weight': 'normal',
               'size'  : 22}
    matplotlib.rc('font', **font_rc)
    

    就可以用了,其实我个人 认为我配置的不算成功

    3.参考这个试试
    https://blog.csdn.net/dgatiger/article/details/50414549

    https://segmentfault.com/a/1190000005144275

    相关文章

      网友评论

          本文标题:matplotlib 解决中文乱码

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