Matplotlib,使用 latex 的一致字体

标签 matplotlib

我的问题是我想在某些图中使用 latex 标题,而在其他图中则不使用 latex 。现在,matplotlib 对于 Latex 标题和非 Latex 标题有两种不同的默认字体,我希望两者保持一致。我是否需要更改 RC 设置才能自动允许此操作?

我使用以下代码生成一个绘图:

import numpy as np
from matplotlib import pyplot as plt

tmpData = np.random.random( 300 )

##Create a plot with a tex title
ax = plt.subplot(211)
plt.plot(np.arange(300), tmpData)
plt.title(r'$W_y(\tau, j=3)$')
plt.setp(ax.get_xticklabels(), visible = False)

##Create another plot without a tex title
plt.subplot(212)
plt.plot(np.arange(300), tmpData )
plt.title(r'Some random numbers')
plt.show()

这就是我所说的不一致之处。轴刻度标签相对于标题来说看起来很薄。:

最佳答案

要使 tex-style/mathtext 文本看起来像常规文本,需要将 mathtext 字体设置为 Bitstream Vera Sans,

import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'custom'
matplotlib.rcParams['mathtext.rm'] = 'Bitstream Vera Sans'
matplotlib.rcParams['mathtext.it'] = 'Bitstream Vera Sans:italic'
matplotlib.rcParams['mathtext.bf'] = 'Bitstream Vera Sans:bold'
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$')

如果您希望常规文本看起来像 mathtext 文本,您可以将所有内容更改为 Stix。这将影响标签、标题、刻度等。

import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'stix'
matplotlib.rcParams['font.family'] = 'STIXGeneral'
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$')

基本想法是,您需要将常规字体和数学文本字体设置为相同,并且这样做的方法有点晦涩。您可以看到自定义字体列表,

sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

正如其他人提到的,您还可以通过在 rcParams 中设置 text.usetex,让 Latex 使用一种字体为您渲染所有内容,但这很慢而且并非完全必要。

关于Matplotlib,使用 latex 的一致字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11367736/

相关文章:

python - 如何删除 matplotlib 中轴值中的指数文本?

python - matplotlib - 从等高线中提取值

matplotlib - 使用 PyCharm 和 Docker 解释器进行 X11 转发

python - 仅在部分子图中共享 matplotlib 中的轴

python - 在Python中的世界地图上覆盖数组

Python:选择落在两条任意曲线内的点

python - Numpy 和 matplotlib 垃圾收集

matlab - 如何通过Python获取3D彩色表面?

python - 图像未转换为灰度

matplotlib - 使用 kind reg 更改 seaborn pairplot 中的标记大小