如何修改matplotlib字体?(matplotlib字体设置)

  参考资料:

  https://matplotlib.org/stable/api/text_api.html?highlight=text#matplotlib.text.Text

  https://matplotlib.org/stable/gallery/text_labels_and_annotations/font_file.html?highlight=font

  matplotlib默认的字体/字体族是:DejaVu Sans,但是这个东西不是很好看,在论文里我们更多的使用的是Times New Roman或者其他字体。网上有一些教程通过修改matplotlib的某些全局参数来实现对字体的修改,但是这种办法十分笨重不优雅。直接看文档,看看官方让我们怎么做。

  首先,我们用matplotlib时,经常会使用plt进行画图,即诸如plt.plot, plt.scatter,当画完图之后,我们会用plt.title来指定图名,会用plt.xlabel指定坐标轴的标签。那么我们不妨看一看这些函数里有没有字体相关的设置,输入help(plt.title),函数文档如下:

  坏了,好像没有字体相关的参数。别着急,这不还有**kwargs么,这里提示了让我们去找.Text的属性,那么我们就到参考资料一的文档里看一下。果然,我们发现了这些可以使用的参数:

  结合参考资料二给出的信息,我们可以用fontproperties(别名 font, font_properties)这个参数来指定使用的字体。这里需要注意,如果输入是str,它会解释成matplotlib fontpath上的内置字体名称。如果输入是Path,它会解释成真实ttf文件的路径。这里贴一下官网的做法:

  那么我们照葫芦画瓢,首先到Internet上下载免费的ttf文件,更名为TNR.ttf(Times New Roman),然后可以写出如下代码:

from pathlib import Path

plt.figure(dpi=200)
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.xticks([])
plt.yticks([])
plt.title("generated layout", font=Path('TNR.ttf'), size="large")

  这样generated layout就是用Times new Roman字体写的啦。举一反三,以后只要是使用matplotlib画图,需要添加文本的地方,都可以利用Text的属性来指定文本的字体,大小等等。

posted @ 2022-07-27 16:47  思念殇千寻  阅读(711)  评论(0编辑  收藏  举报