在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 usesmatplotlibrc
configuration files to customize all kinds of properties, which we callrc settings
orrc 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 settings
或rc parameters
。您可以控制matplotlib
中几乎每个属性的默认值:图形大小和dpi、线宽、颜色、···、文本和字体属性等等。
也就是说,理论上是可以通过配置文件达到我的目的的,但存在以下问题:
说明:每次修改我都有先删除缓存文件(文件夹位置:C:\Users\鴻塵\.matplotlib
)、然后保存配置、重启Python
。
1 . 全局文字
matplotlibrc
文件主要修改了FONT
和TEXT
,将系统字体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 YaHei
或SimHei
,那么所有文字都是Microsoft YaHei
。
总结一句话就是:如何分别设置中英字体?
我看到文件说,font.serif或font.sans-serif
中的顺序是按从高到低的优先级排列的,为什么不是当第一个失败时依次尝试第二第三个呢?
matplotlibrc
文件原文:
Thefont.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. Whentext.usetex
isFalse
,font.family
may also be one or more concrete font names.翻译:
font.family
属性有五个值。这些字体系列中的每一个都有一个默认的字体名称列表,按照与其相关联的优先级的降序排列。当text.usetex
属性为False
时,font.famil
y也可以是一个或多个具体的字体名称。
比如下图,假设上图配置为font.serif: Times New Roman, Microsoft YaHei,···
,能否使其先以Times New Roman
(处理英文和数字),然后遇到中文时Times New Roman
无法处理再用Microsoft YaHei
呢?
2 . 公式文字
公式文字我在LaTeX customizations
中将公式字体集设置为mathtext.fontset : stix
,同样只能正常显示西文,而且不受font.family
的影响。