在matplotlib中更改ax.text的字体

4

我正在使用Matplotlib制作Python绘图。

在代码开头,我使用了以下命令:

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

为了改变绘图中文本的字体,我还需要使用:

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

但是这段文字不是宋体字体。
我如何使ax.text变成宋体字体?
谢谢。
1个回答

7

1. 参数 fontdict

Axes.text matplotlib 文档 表示:

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

因此,您必须在 ax.text() 中包含 fontdict=None,才能按照 rcParams 中指定的字体显示其字体。

ax.text(..., fontdict=None)

fontdict参数自matplotlib 2.0.0版本起可用。

2. 数学表达式

此外,对于像$a=b$这样的数学表达式,文档中提到:

可以使用mathtext.default rcParam更改默认字体。例如,通过将其设置为regular,可以将与非数学文本相同的字体用于数学文本。

因此,您还需要将默认字体设置为'regular':

rcParams['mathtext.default'] = 'regular'

此选项自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()

enter image description here


谢谢。我已经这样做了,但没有改变任何东西。字体仍然是无衬线体。我正在使用 matplotlib 版本 2.2.2。 - user1551817
1
@user1551817,我在我的答案中添加了一个完整的示例。我已经使用2.2.2运行它并且可以正常工作。也许问题的原因在于您的代码其他地方。 - David
1
谢谢。看起来使用“$example$”而不是“example”是区别所在。 - user1551817
1
@user1551817 你是对的。我已经完成了回答数学表达式的部分。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接