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