如何在Matplotlib(Python)中更改字体?


84

听起来这是一个简单的问题,但是我找不到在python中用matplotlib制作的图中更改字体(不是字体大小)的有效解决方案。

我找到了一些教程,可通过修改matplotlib存储默认字体的文件夹中的一些文件来更改matplotlib的默认字体-请参阅此博客文章-但我正在寻找一种不太激进的解决方案,因为我想使用多个我的绘图中的字体(文本,标签,轴标签等)。


很高兴它能帮到您:)您可以张贴导致此错误的代码吗?我自己没有看到此错误,但是这里有一些链接可能会对您有所帮助。 matplotlib.1069221.n5.nabble.com/... matplotlib.1069221.n5.nabble.com/Fonts-not-found-td12936.html
aidnani8

产生问题的代码是:如果我像您的示例中那样将它用作字体名称Comic Sans MS hfont = {'fontname':'Helvetica'} plt.annotate('Country ', (0.17,0.95), xytext=None, xycoords='figure fraction',size=28, color='red', horizontalalignment = 'left', **hfont),则错误是/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/m‌​atplotlib/font_manager.py:1236: UserWarning: findfont: Font family ['Helvetica'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext]))该代码起作用。
SirC 2014年

Answers:


98

假设您要标题为Comic Sans,x标签为Helvetica。

csfont = {'fontname':'Comic Sans MS'}
hfont = {'fontname':'Helvetica'}

plt.title('title',**csfont)
plt.xlabel('xlabel', **hfont)
plt.show()

1
我尝试了并且有效!这正是我想要的。然而,对于一些字体我有以下错误信息(不是所有)/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/font_manager.py:1236: UserWarning: findfont: Font family ['Helvetica'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext]))。如何在matplotlib已知的字体集中安装Helvetica?
SirC 2014年

4
找到fontList.cache文件,则只能使用那里列出的文件。或者在这里看看stackoverflow.com/questions/20206906/…–
B.Kocis

3
跟进以上评论。要找到您的fontList.cache文件,请使用matplotlib.get_cachedir()
CS

48

您还可以使用rcParams全局更改字体系列。

 import matplotlib.pyplot as plt
 plt.rcParams["font.family"] = "cursive"
 # This will change to your computer's default cursive font

matplotlib的字体系列参数列表在此处


19

我更喜欢雇用:

from matplotlib import rc
#rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('font',**{'family':'serif','serif':['Times']})
rc('text', usetex=True)

8
import pylab as plb
plb.rcParams['font.size'] = 12

要么

import matplotlib.pyplot as mpl
mpl.rcParams['font.size'] = 12

9
令人难以置信的是,这正是我一直在寻找的命令。绝对不是OP在问什么
蓝色

2

Windows不附带Helvetica字体,因此,要使用它,必须将其下载为.ttf文件。然后,您可以像这样将matplotlib引用到它(用文件替换“ crm10.ttf”):

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

fig, ax = plt.subplots()

fpath = os.path.join(rcParams["datapath"], "fonts/ttf/cmr10.ttf")
prop = fm.FontProperties(fname=fpath)
fname = os.path.split(fpath)[1]
ax.set_title('This is a special font: {}'.format(fname), fontproperties=prop)
ax.set_xlabel('This is the default font')

plt.show()

print(fpath) 将显示您应将.ttf放在哪里。

您可以在此处查看输出:https : //matplotlib.org/gallery/api/font_file.html


有什么办法来设置fontproperties全局所以你不必每调用如指定它set_title()set_xlabel()等等?
凯尔·米尔斯

1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.