Более простой способ выделить жирным шрифтом строковую переменную в matplotlib

#python #matplotlib #text

#python #matplotlib #текст

Вопрос:

Сегодня у меня возникла очень специфическая проблема: я хочу напечатать строковую переменную внутри функции, используя plt.text() жирный шрифт. Я чувствую, что использую графические возможности Python до предела при смешивании mathtext с обычным синтаксисом.

Итак, важная часть функции выглядит следующим образом:

 def graph_text(var):
    string0=f'String is:' r"$bf{" var "}$"
    plt.text(string0)
  

Дело в том, var что некоторые строки могут содержать от одного до трех слов. По умолчанию в mathtext строки объединены, поэтому для var='the dog' этого было бы напечатано ‘String is thedog‘.

Затем я попытался использовать split() и '/'.join() , вот так:

 string0=f'String is:' r"$bf{" ('/'.join(var.split())) "}$"
  

( ‘/’ — это пробел в mathtext , но поскольку здесь мы находимся за пределами mathtext синтаксиса, это интерпретируется как символ области видимости и приносит SyntaxError . Итак, единственное решение, которое я смог найти, это вручную сделать это следующим образом:

  if len(var)==1:
    string0=f'String is:' r"$bf{" var.split()[0] "}$"
elif len(var)==2:
    string0=f'String is:' r"$bf{" var.split()[0] r" $bf{" var.split()[1] "}$"
else:
    (insert same code but for three words)
  

Итак, вы знаете, есть ли способ сделать это без учета каждого возможного случая? Спасибо

Ответ №1:

При написании документов LaTeX я использую ; пробел в математическом режиме. Похоже, здесь это тоже работает.

 plt.text(0,0,r'String is $bf{{{}}}$'.format(var.replace(' ', r';')))
  

Я предлагаю использовать str.format() вместо объединения ваших строк, потому что это прояснит ваше намерение при следующем просмотре.

Комментарии:

1. Почти тот же ответ, который я бы написал, просмотрев, например, этот сайт: overleaf.com/learn/latex/Spacing_in_math_mode

2. Только один вопрос, почему вы используете тройные скобки ( {{{}}} ) вместо простой скобки?

3. @juan-c {} используется для обозначения того, что что-то будет заменено на .format() . Когда вам буквально нужно, чтобы { сохранялась в вашей конечной строке, вы избегаете ее, удваивая с помощью {{ . Взгляните на официальные документы и на этот полезный веб-сайт