更改matplotlib中ax.text的字体

use*_*817 4 python fonts matplotlib

我正在使用 matplotlib 制作 python 绘图。

在代码的开头,我使用:

plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.serif'] = ['Times New Roman'] + plt.rcParams['font.serif']
Run Code Online (Sandbox Code Playgroud)

为了改变我的图中文本的字体。

我也用:

ax.text(0.5,0.5, r'$test_{1}$', horizontalalignment='center', verticalalignment='center', size=18)
Run Code Online (Sandbox Code Playgroud)

但这段文字不是 Times New Roman。

如何将ax.textTimes 变成新罗马字体?

谢谢。

Dav*_*vid 7

1、参数fontdict

Axes.text matplotlib 文档说:

如果 fontdict 为 None,则默认值由您的 rc 参数确定。

因此,您必须包含fontdict=Nonein ax.text(),以便按照 中指定的方式显示其字体rcParams

ax.text(..., fontdict=None)
Run Code Online (Sandbox Code Playgroud)

该参数自matplotlib 2.0.0fontdict起可用。

2. 数学表达式

此外,对于像 之类的数学表达式$a=b$文档说:

可以使用mathtext.default rcParam更改此默认[字体] 。这很有用,例如,通过将数学文本设置为常规,使用与常规非数学文本相同的字体。

因此,您还需要将默认字体设置为“常规”:

rcParams['mathtext.default'] = 'regular'
Run Code Online (Sandbox Code Playgroud)

该选项至少自matplotlib 2.1.0起可用

3. 示例

您的代码现在应该类似于:

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.serif'] = ['Times New Roman'] + plt.rcParams['font.serif']
plt.rcParams['mathtext.default'] = 'regular'

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])

ax.text(0.5, 0.5, '$example$', horizontalalignment='center', 
        verticalalignment='center', size=18, fontdict=None)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述