ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

matplotlib、seaborn 展示中文字体

2021-02-22 23:32:04  阅读:427  来源: 互联网

标签:seaborn fonts matplotlib 中文字体 Songti import font ttf


matplotlib、seaborn 展示中文字体

我们经常使用matplotlibseaborn绘制各种图标但是失望的是他们对中文字符不支持。

matplotlib 展示中文

查找系统上中文字体的安装位置,我选用的是宋体,然后拷贝到可读目录下~/fonts/Songti.ttc

mac: /System/Library/Fonts/Supplemental/Songti.ttc
window: C:\WINDOWS\Fonts\中文字体.ttf
linux: /usr/share/fonts

python 代码:

import matplotlib.font_manager as fm,os
import matplotlib.pyplot as plt

# 添加字体
myfont = fm.FontProperties(fname=os.path.join(os.getenv('HOME'),'fonts/Songti.ttc'),size=10)
plt.xlabel('长度',fontproperties=myfont)
plt.ylabel('宽度',fontproperties=myfont)

seaborn 展示中文

方法一:提供字体文件

  1. 查找系统上中文字体的安装位置,我选用的是宋体,然后拷贝到可读目录下~/fonts/Songti.ttc

    mac: /System/Library/Fonts/Supplemental/Songti.ttc
    window: C:\WINDOWS\Fonts\中文字体.ttf
    linux: /usr/share/fonts
    
  2. Python 代码:

    import os
    import matplotlib.font_manager as fm
    import seaborn as sns
    import pandas as pd
    
    # 添加字体
    myfont = fm.FontProperties(fname=os.path.join(os.getenv('HOME'),'fonts/Songti.ttc'),size=10)
    sns.set(font=myfont.get_name())
    
    tips = pd.DataFrame({
        'time':["午餐","晚餐"],
        'total_bill':[1,2],
    })
    sns.pointplot(x="time", y="total_bill", data=tips)
    

方法二:添加字体

  1. 查看 matplotlib 默认字体

    from matplotlib.font_manager import findfont, FontProperties  
    
    findfont(FontProperties(family=FontProperties().get_familys
    # out: /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf
    
  2. 查找 matplotlibrc的路径

    import matplotlib
    
    matplotlib.matplotlib_fname()
    # out: /home/xxx/venv/lib64/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc 
    
  3. 修改matplotlibrc

    vim /home/xxx/venv/lib64/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc 
    

    取消注释font.familyfont.sans-serif ,然后在font.sans-serif后追加你刚才的字符集名:

    # 获取字符集名
    import matplotlib.font_manager as fm
    
    myfont = fm.FontProperties(fname=os.path.join(os.getenv('HOME'),'fonts/Songti.ttc'),size=10)
    myfont.get_name()
    
    # out: Songti SC
    

    修改:

    font.family: sans-serif 
    #font.style:   normal
    #font.variant: normal
    #font.weight:  normal
    #font.stretch: normal
    #font.size:    10.0
    
    #font.serif:      DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L,Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
    font.sans-serif: Songti SC, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
    #font.cursive:    Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive
    #font.fantasy:    Comic Neue, Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, xkcd, fantasy
    #font.monospace:  DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace
    
  4. 移除matplotlib缓存

    rm -rf ~/.matplotlib
    
  5. 拷贝你的字体文件到matplotlib字体目录下

    cp /System/Library/Fonts/Supplemental/Songti.ttc  /Users/Andrew/miniconda3/envs/technical-note/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
    
  6. 重启jupyter Notebook 内核,然后就可以了。

方法三:直接替换默认字体

  1. 查看matplotlib默认字体

    from matplotlib.font_manager import findfont, FontProperties  
    
    findfont(FontProperties(family=FontProperties().get_familys
    # out: /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf
    
  2. 备份字体

    cp /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf.bp
    
  3. 替换

    cp /System/Library/Fonts/Supplemental/Songti.ttc /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf
    
  4. 重启jupyter Notebook 内核,然后就可以了

标签:seaborn,fonts,matplotlib,中文字体,Songti,import,font,ttf
来源: https://www.cnblogs.com/feiquan/p/14433595.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有