2025, Nov 18 00:02

Полужирный текст в аннотациях Matplotlib: почему \textbf падает и что делать

Разбираем ошибку Matplotlib Expected \text, found 'bf' при попытке применить \textbf в аннотациях и показываем решение: \mathbf для корректного полужирного текста.

Выделение текста полужирным в аннотациях Matplotlib оказывается неожиданно сложным, если полагаться на синтаксис, похожий на LaTeX. Часто пытаются обернуть содержимое в \textbf — и получают от парсера ошибку, которая на первый взгляд выглядит непонятной. Разберёмся, что происходит, и покажем минимальный, надёжный способ сделать текст жирным в такой ситуации.

Постановка задачи

Нужно отрисовать аннотацию на графике полужирным. В попытке ниже используется команда в стиле LaTeX внутри строки аннотации:

import matplotlib.pyplot as plt
canvas, axes_obj = plt.subplots(figsize=(6, 4))
axes_obj.annotate(r"$ \textbf {y = -\,\frac{1}{\sqrt{2}}x + 1} $", 
                  xy=(0.2, 0.7), rotation=-35, fontweight='bold', fontsize=12)
plt.show()

Вместо полужирного текста код вызывает ошибку:

ValueError:
\textbf {y = -\,\frac{1}{\sqrt{2}}x + 1}
     ^
ParseSyntaxException: Expected \text, found 'bf' (at char 6), (line:1, col:7)

Что на самом деле означает ошибка

Сообщение на самом деле довольно прямое. Парсер воспринимает последовательность токенов как \text, за которым следует отдельный текст bf. Иными словами, \textbf здесь не распознаётся как одна корректная команда: оно разбивается на \text и следующий фрагмент bf, после чего возникает сбой с “Expected \text, found 'bf'.” Если вы встречали упоминание \txtbf, это просто опечатка; исправление на \textbf всё равно приводит к той же проблеме.

Решение: используйте \mathbf в строке аннотации

В этой конфигурации \textbf недоступна, поэтому парсер и выдаёт ошибку. Переход на \mathbf снимает проблему и даёт полужирное отображение в аннотации:

import matplotlib.pyplot as plt
canvas, axes_obj = plt.subplots(figsize=(6, 4))
axes_obj.annotate(r"$ \mathbf {y = -\,\frac{1}{\sqrt{2}}x + 1} $", 
                  xy=(0.2, 0.7), rotation=-35, fontweight='bold', fontsize=12)
plt.show()

Такое изменение сохраняет задуманный визуальный эффект — выделение формулы полужирным — и не вызывает ошибку парсера.

Почему это важно

В аннотациях нередко соседствуют код построения графика и встроенная математическая разметка. Если парсер не знает макрос, он может разбить токены неожиданным образом и упасть с сообщениями, которые неочевидно связаны с вашей задачей. Понимание того, какие команды поддерживаются, избавляет от лишней отладки форматирования и позволяет сосредоточиться на данных и визуализации. В нашем случае простая замена \textbf на \mathbf достаточно, чтобы получить полужирное отображение математического содержимого.

Итоги

Если вы выделяете текст полужирным в аннотациях Matplotlib и сталкиваетесь с синтаксической ошибкой, указывающей на \textbf — особенно с формулировкой “Expected \text, found 'bf'” — используйте вместо этого \mathbf внутри математической строки. Заодно проверьте, нет ли путаницы между \txtbf и \textbf. С этими поправками аннотации корректно отрисуются, а код построения останется простым и понятным.