更改matplotlib的默认字体

时间:2014-01-30 15:52:55

标签: python fonts matplotlib defaults

我正在尝试将matplotlib的默认字体更改为Helvetica Neue。在EPD / Canopy的Mac上,一切都很好。

现在尝试在ubuntu上做同样的事情并且它不起作用。

这就是我所做的:

  1. 已安装Helvetica Neue

    $ fc-match 'Helvetica Neue':Light
    HelveticaNeue-Light.otf: "Helvetica Neue" "細體"
    
  2. 将odt / dfont转换为ttf:

    fondu -show HelveticaNeue.dfont
    
  3. 将matplotlibrc更改为

    $ cat ~/.config/matplotlib/matplotlibrc
    ...
    font.family: Helvetica Neue
    

    我也尝试过:

    font.family: sans-serif
    font.sans-serif: Helvetica Neue
    
  4. 我删除了字体缓存

    rm ~/.config/matplotlib/fontList.cache
    
  5. 但这些步骤都不适合我。

        $ python -c 'from  matplotlib import pyplot as plt; plt.plot(1); plt.savefig("/tmp/test.png")'
        /usr/local/lib/python2.7/dist-packages/matplotlib-1.3.0-py2.7-linux-x86_64.egg/matplotlib/font_manager.py:1236: 
        UserWarning: findfont: Font family ['Helvetica Neue'] not found. Falling back to Bitstream Vera Sans
    

    (prop.get_family(),self.defaultFamily [fontext]))

    版本是1.3.0

        $ python -c 'import matplotlib; print  matplotlib.__version__'
        1.3.0
    

    我也尝试将字体移动到~/.config/matplotlib/fonts/ttf,但它没有用。


    修改 建议我尝试为特定文本选择特定字体。

    import matplotlib as mpl
    mpl.use('Agg')
    import matplotlib.pyplot as plt
    import matplotlib.font_manager as font_manager
    
    path = '/home/<myusername>/.fonts/HelveticaNeue.ttf'
    
    prop = font_manager.FontProperties(fname=path)
    prop.set_weight = 'light'
    mpl.rcParams['font.family'] = prop.get_name()
    mpl.rcParams['font.weight'] = 'light'
    
    fig, ax = plt.subplots()
    ax.set_title('Text in a cool font', fontproperties=prop, size=40)
    plt.savefig('/tmp/test2.png')
    

    但它没有任何区别。

    /usr/local/lib/python2.7/dist-packages/matplotlib-1.3.0-py2.7-linux-x86_64.egg/matplotlib/font_manager.py:1236: 
    UserWarning: findfont: Font family ['Helvetica Neue'] not found. Falling back to Bitstream Vera Sans
    

    但是我似乎只能使用这个Helvetica / Helvetica Neue字体来解决这个问题。       (prop.get_family(),self.defaultFamily [fontext]))

4 个答案:

答案 0 :(得分:13)

这不会永久改变你的字体,但值得一试

matplotlib.rc('font', family='sans-serif') 
matplotlib.rc('font', serif='Helvetica Neue') 
matplotlib.rc('text', usetex='false') 
matplotlib.rcParams.update({'font.size': 22})

答案 1 :(得分:8)

Ubuntu 14.04 LTS

上传字体

sudo cp NotoSansKR-Regular.otf /usr/share/fonts/

更新字体缓存

sudo fc-cache -fv

您可以查看字体列表

fc-list

重启ipython等 检查字体列表

[f.name for f in matplotlib.font_manager.fontManager.ttflist]

取一个字体名称

import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.family'] = 'Noto Sans Korean'

绘制

plt.title(u'한글 제목')
plt.xlabel(u'한글 축 이름')
plt.plot(range(5))

答案 2 :(得分:1)

字体缓存显示在我的不同位置(.cache / matplotlib / fontList.cache)。之前我确实在不同的地方有三个人:/

也许可以尝试在您的主目录中搜索它:

find ~/ -name fontList.cache -exec rm {} \;

答案 3 :(得分:1)

Kim已经介绍了动态解决方案的完美工作,以及另外两种在静态方面做同样事情的方法。

首先,您可以为matplotlib的rc文件添加一行。有关查找文件和详细设置的详细信息,请参阅this page

font.family : NanumGothic

其次,如果您正在使用ipython,则可以将一些字体设置命令放入交互式shell的配置文件中。找到名为ipython_config.py的文件,该文件通常位于〜/ .ipython / somewhere下。然后在列表中再添加两行,c.InteractiveShellApp.exec_lines。

c.InteractiveShellApp.exec_lines = [
    "import matplotlib as mpl",
    "mpl.rcParams['font.family'] = 'NanumGothic'"
]

当脚本导入matplotlib时,前者始终可以运行您运行shell脚本的任何环境,因为它会加载字体。