如何在matplotlib(python)中更改字体?

如何在matplotlib(python)中更改字体?,python,fonts,matplotlib,Python,Fonts,Matplotlib,这听起来是一个简单的问题,但我没有找到任何有效的解决方案来更改python中使用matplotlib制作的绘图中的字体(而不是字体大小) 我找到了一些教程,可以通过修改matplotlib存储默认字体的文件夹中的一些文件来更改matplotlib的默认字体-请参见-但我正在寻找一个不太激进的解决方案,因为我希望在绘图中使用多个字体(文本、标签、轴标签等).假设您想要漫画版的标题为Sans,x标签为Helvetica csfont = {'fontname':'Comic Sans MS'} hf

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


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

假设您想要漫画版的标题为Sans,x标签为Helvetica

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

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


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

 import matplotlib.pyplot as plt
 plt.rcParams["font.family"] = "cursive"
 # This will change to your computer's default cursive font
matplotlib字体系列参数列表如下。

我更喜欢使用:

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

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

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

您可以在此处看到输出:

我试过了,效果很好!这正是我想要的。但是,对于某些字体,我有以下错误消息(并非所有字体):
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/font_manager.py:1236:UserWarning:findfont:font-family['Helvetica']未找到。回到Bitstream Vera Sans(prop.get_family()、self.defaultFamily[fontext]))
。如何在matplotlib已知的字体集中安装Helvetica?找到fontList.cache文件,您只能使用其中列出的字体。或者在这里查看上述评论的后续内容。要查找fontList.cache文件,请使用matplotlib.get_cachedir()谢谢!因为这只是用
**
语法解包一个字典,所以我试着简单地做
plt.title('title',fontname='monospace')
,它也能工作!很高兴它有帮助:)您能发布导致此错误的代码吗?我自己也没有看到这个错误,但是这里有一些链接可以帮助你。产生问题的代码是:
hfont={'fontname':'Helvetica'}plt.annotate('Country',(0.17,0.95),xytext=None,xycoords='figure-fraction',size=28,color='red',horizontalalignment='left',**hfont
,错误是
/Library/Frameworks/python2.7/site-packages/m‌​atplotlib/font_manager.py:1236:UserWarning:findfont:font-family['Helvetica']未找到。回到Bitstream Vera Sans(prop.get_family(),self.defaultFamily[fontext])
相反,如果我像您的示例中那样使用fontname Comic Sans MS,代码会正常工作。令人难以置信的是,这正是我要找的命令。虽然提问者在问题中明确表示他不想更改字体大小,但肯定不是OP问的问题。有没有办法全局设置
fontproperties
,这样您就不必在每次调用时都指定它,例如
set_title()
set_xlabel()
,等等?^为了回答我自己的问题:在全球范围内改变字体的好方法,我正在寻找这个。最后一行不是必需的,不确定Tex与此有什么关系。如果由于Matplotlib找不到所需字体而出现错误,请查看以下链接:
 import matplotlib.pyplot as plt
 plt.rcParams["font.family"] = "cursive"
 # This will change to your computer's default cursive font
from matplotlib import rc
#rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('font',**{'family':'serif','serif':['Times']})
rc('text', usetex=True)
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()