LaTeX中Matplotlib坐标轴标签的粗体字体权重

45
matplotlib 中,您可以通过以下方式使轴标签的文本加粗:
plt.xlabel('foo',fontweight='bold')

你也可以使用正确的后端与 LaTeX 配合使用

plt.xlabel(r'$\phi$')

然而,当它们结合在一起时,数学文本就不再是粗体了

plt.xlabel(r'$\phi$',fontweight='bold')

以下 LaTeX 命令似乎也没有任何作用。

plt.xlabel(r'$\bf \phi$')
plt.xlabel(r'$\mathbf{\phi}$')

如何在坐标轴标签中加粗符号 $\phi$

9个回答

42

很遗憾,您不能使用加粗字体加粗符号,请参考tex.stackexchange上的此问题

正如答案所建议的,您可以使用\boldsymbol来加粗φ:

r'$\boldsymbol{\phi}$'
你需要在 TeX 的导言区中加载 amsmath
matplotlib.rc('text', usetex=True)
matplotlib.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"]

这个不起作用:ValueError: \boldsymbol{\phi}^ Unknown symbol: \boldsymbol (at char 0), (line:1, col:1),也许需要加载 amsmath 吗?你在你的机器上测试过吗? - Hooked
1
@Hooked 我认为包括导言部分应该按照这里所述工作:matplotlib.rc('text', usetex=True)matplotlib.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"]。不幸的是我还不能测试,等我有了结果会更新。 - Andy Hayden
1
在Matplotlib 3.3.3上,使用Python 3 7.13.0,在将这些命令添加到rcParams时,尝试绘图会导致以下错误:!LaTeX错误:找不到文件type1ec.sty。 - MRule
1
@MRule - 请参考 https://github.com/matplotlib/matplotlib/issues/16911 - 在 Debian 及其衍生版本上:sudo apt install cm-super - 在 macOS 上:sudo tlmgr install cm-super - 在其他系统上:请查看 https://repology.org/projects/?search=cmsuper 或 https://repology.org/projects/?search=cm-super 或 https://repology.org/projects/?search=fontsrecommended 中列出的软件包。 - Samuel Lelièvre
3
在Python 3.9.9中,matplotlib.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"]对我没有用,但是matplotlib.rc('text.latex', preamble=r'\usepackage{amsmath}')可行!感谢这篇文章 - Maze
除了 apt-get install cm-super,我还需要执行 apt-get install dvipng。没有其他更改,这将提供 \bf 符号,但不包括 \mathbf\boldsymbol。接下来添加 rc('text', usetex=True); rc('text.latex',preamble=r"\usepackage{amsmath}") 就可以同时使用 \mathbf\boldsymbol 了!成功了! - MRule

19

如果你想在整个图表中一直使用粗体字,最好的方法可能是启用 LaTeX 并在导言区添加 \boldmath

# Optionally set font to Computer Modern to avoid common missing font errors
matplotlib.rc('font', family='serif', serif='cm10')

matplotlib.rc('text', usetex=True)
matplotlib.rcParams['text.latex.preamble'] = [r'\boldmath']

那么你的轴标签或图形标签可以使用任何数学latex表达式并仍然保持粗体:

plt.xlabel(r'$\frac{\phi + x}{2}$')

然而,对于那些不是数学符号的标签部分,您需要明确将它们设置为粗体:

plt.ylabel(r'\textbf{Counts of} $\lambda$'}

19

如果有人像我一样从 Google 上偶然发现这个问题,还有一种不需要修改 RC 前导(与非 LaTeX 文本冲突)的方法:

ax.set_ylabel(r"$\mathbf{\partial y / \partial x}$")

刚刚浏览了大量有关路径变量和配置rcParams等方式的信息,对我来说,这是最好的解决方案,即使没有其他依赖项,也能完全实现所需功能。提醒一下,如果您想使用\mathit{},可以使用双反斜杠在单词或字符之间添加空格 :) - whatf0xx

3

我想做类似的事情,只是要以“K”为标签并加粗下标“1/2”。这可以在不更改任何rc参数的情况下实现。

plt.figure()
plt.xlabel(r'$\bf{K_{1/2}}$')

1
简单易用,功能稳定!已在Python/matplotlib中进行了测试。 - shredEngineer

1
使用LaTeX排版图中的所有文本时,您可以通过使用\textbf使“普通”(非方程式)文本加粗:
ax.set_title(r"\textbf{some text}")

1

对我来说,这些解决方案都没有用,我很惊讶地发现实现起来如此简单却如此令人恼火。最终,以下是适合我的用例的解决方法。建议您根据自己的需要进行调整:

plt.suptitle(r"$ARMA({0}, {1})$ 多参数,$\bf{{a}}$,电极响应".format(n_i, m), fontsize=16)

{0}{1} 是传递给 format 方法的位置参数,意思是 0 指代变量 n_i1 指代变量 m

注意:在我的设置中,由于某种原因,\textbf 无法使用。我曾在某个地方看到过 \bf 已经被 LaTeX 废弃了,但对我而言,它是可行的。


1
接受的答案似乎包含了已弃用的参数设置语法。我在评论中找到了相同的问题。
以下方法对我有效:
plt.rc('text', usetex=True)
plt.rc('text.latex', preamble=r'\usepackage{amsmath}')

在这里找到:
如何使用LaTeX/amsmath与matplotlib?

0

最近Matplotlib版本的更新

在更近期的Matplotlib版本中,前言必须被指定为字符串。

import matplotlib.pyplot as plt

plt.rcParams.update(
    {
        "text.usetex": True,
        "text.latex.preamble": r"\usepackage{bm}",

        # Enforce default LaTeX font.
        "font.family": "serif",
        "font.serif": ["Computer Modern"],
    }
)

# ...

plt.xlabel(r"$\bm{\phi}$")

这里使用默认的LaTeX字体"Computer Modern",以获得更自然的外观。

除了\bm之外,还可以使用旧版的\boldsymbol,它来自于\usepackage{amsmath}


0

正如这个答案Python上的Latex:\alpha和\beta无法工作?所指出的。你可能会遇到\b的问题,因此\boldsymbol可能无法按预期工作。在这种情况下,您可以在Python代码中使用类似于'$ \\\boldsymbol{\\\beta} $'的东西。只要您使用前导plt.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"]


谢谢您提供这个(4年前的)输入!但在字符串前面使用 r 应该有助于转义 \b。@AndyHayden 提供的答案很好地解决了问题。 - Hooked

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