matplotlib字体配置问题

Python中使用matplotlib绘图时,字体始终是一个问题。
我原设想修改为:

  • 中文=宋体/微软雅黑/黑体;
  • 英文和数字=Times New Roman

试图通过修改matplotlib的配置文件(位置:D:\Python3.7.3\Lib\site-packages\matplotlib\mpl-data\matplotlibrc):
官方链接:The matplotlibrc file: Customizing Matplotlib with style sheets and rcParams

matplotlib uses matplotlibrc configuration files to customize all kinds of properties, which we call rc settings or rc parameters. You can control the defaults of almost every property in matplotlib: figure size and dpi, line width, color and style, axes, axis and grid properties, text and font properties and so on.

翻译一下就是:
matplotlib通过配置文件matplotlibrc来自定义所有类型的属性,我们称之为rc settingsrc parameters。您可以控制matplotlib中几乎每个属性的默认值:图形大小和dpi、线宽、颜色、···、文本和字体属性等等。

也就是说,理论上是可以通过配置文件达到我的目的的,但存在以下问题:
说明:每次修改我都有先删除缓存文件(文件夹位置:C:\Users\鴻塵\.matplotlib)、然后保存配置、重启Python

1 . 全局文字

matplotlibrc文件主要修改了FONTTEXT,将系统字体Microsoft YaHei和Times New Roman拷到D:\Python3.7.3\Lib\site-packages\matplotlib\mpl-data\fonts\ttf下,然后将#font.family : sans-serif去掉注释并改为font.family : serif(因为font.serif中有Times, Times New Roman)。
这样可以使英文和数字正确显示,但是中文是□□;如果将font.family改为Microsoft YaHeiSimHei,那么所有文字都是Microsoft YaHei

总结一句话就是:如何分别设置中英字体?
我看到文件说,font.serif或font.sans-serif中的顺序是按从高到低的优先级排列的,为什么不是当第一个失败时依次尝试第二第三个呢?

font.serif或font.sans-serif

matplotlibrc文件原文:

The font.family property has five values: xx, xx, xx, xx, and xx. Each of these font families has a default list of font names in decreasing order of priority associated with them. When text.usetex is False, font.family may also be one or more concrete font names.

翻译:font.family属性有五个值。这些字体系列中的每一个都有一个默认的字体名称列表,按照与其相关联的优先级的降序排列。当text.usetex属性为False时,font.family也可以是一个或多个具体的字体名称。

比如下图,假设上图配置为font.serif: Times New Roman, Microsoft YaHei,···,能否使其先以Times New Roman(处理英文和数字),然后遇到中文时Times New Roman无法处理再用Microsoft YaHei呢?
中文无法显示并报错:missing from current font

2 . 公式文字

公式文字我在LaTeX customizations中将公式字体集设置为mathtext.fontset : stix,同样只能正常显示西文,而且不受font.family的影响。

阅读 4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏