如何在matplotlib中更改默认的latex字体

5
我希望在matplotlib中使用类似'$x^2$'的latex语法来标注或注释。但我该如何将latex的默认字体'Roman'更改为'times new roman',而不影响其他任何内容呢?谢谢。
抱歉,作为网站新用户,我无法上传图片。
我没有在计算机上安装latex,也不想安装它。
例如:
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2
plt.rc('font', family='times new roman', size=16)
plt.plot(t, s)
plt.annotate('$Roman\ by\ TeX:\ x\ y$',(0.33,1.5))
plt.annotate('Times New Roman: x y', (0.33,1.4),style='italic')
plt.subplots_adjust(top=0.8)
plt.show()

1
@unutbu 显然,“你不需要安装TeX,因为matplotlib自带TeX表达式解析器、布局引擎和字体。” http://matplotlib.org/users/mathtext.html ……这对我来说也是个好消息。 - mfitzp
@mfitzp:谢谢!我不知道那个。 - unutbu
1个回答

3
默认情况下,matplotlib中LaTeX的设置存储在您的.matplotlibrc文件中。在Linux上,该文件位于~/.config/matplotlib/matplotlibrc,其他平台则在~/.matplotlib/matplotlibrc(其中~是您的主目录)中。该文件包含各种选项,可以控制matplotlib的行为。
以下设置确定是否对matplotlib中的所有文本使用LaTeX(您可能不想打开此选项,但有时需要):
text.usetex        : false

这决定了图表的字体系列(此处显示的是衬线字体)和用于衬线字体的字体:

font.family        : serif
font.serif         : Times New Roman

以下内容决定了数学渲染所使用的方式(这可能是您想要的)。如果您取消注释下面这行代码 matplotlib,则将使用上面定义的serif字体(当前为Times)来渲染数学公式:
mathtext.rm  : serif
mathtext.it  : serif:italic
mathtext.bf  : serif:bold
mathtext.fontset: custom

您可以在SciPy维基上此文档中找到有关自定义LaTeX的更多信息。 font.serif 设置允许您将衬线字体更改为任何您想要的字体。不幸的是,如果您要求 Times New Roman,则 matplotlib TeX 引擎似乎始终使用 Roman 字体。如上所示,前三个图像是正确的,但是最后一个图像明显不是 Times New Roman。如果接受替代字体,Bitstream Vera Serif(从底部第二个)可能外观足够接近。

非常感谢。但仍然没有找到正确的方法。你测试过吗? - He Da
@he-da 抱歉,你说得很对。我错过了设置一些关键参数(因为你使用了斜体文本)。不幸的是,即使所有这些都正确设置,Matplotlib也会在MathTex中用Roman字体替换Times New Roman字体。我会看看能否想出解决办法。 - mfitzp

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