网上铺天盖地matplotlib字体教程,但是为啥我还要再写一个呢?
因为广大的科研人员的需求一般都是要求如下的格式:中文:宋体
英文:Times New Roman
公式:与英文配合
然而现有的问题如 用Python的matplotlib画图,怎么保证xlabel中中文用宋体,英文用新罗马? 也没有令人满意的方案。在探索了一段时间后,得到了两种解决方案,可以在同一行内采用不同的中英文以及公式字体。
现有的方法及问题如果直接设置中文字体,如在matplotlibrc里面修改font.serif: SimSun,则英文字体会被覆盖,因为中文字体中往往都自带英文字体,但大多比较丑。
如果设置usetex=Ture,即调用外部tex程序来渲染,则会因为调用的是pdflatex而显示不了中文。
所以针对这两种方法的问题,分别有对应的解决方案:
使用内置tex
Matplotlib(下称mpl)自带tex引擎,可以解析并显示Latex字符串。虽然中文会覆盖英文字体,但是mpl的数学字体和一般的text字体是独立的,所以我们可以把文字放到Latex字符串里面,并使用\mathrm{text}来使其显示为正体。
mpl自带有几种数学字体,最常用的有cm系列和stix系列,前者是Latex默认的数学字体,而stix的正体和Times New Roman差别很小,一般用来和Times New Roman搭配。所以这里我们采用stix,即可达到相同的视觉效果。
代码如下:
import matplo