Вставить новую строку в метку matplotlib с помощью TeX в Python?

Как добавить новую строку к метке графика (например, xlabel или ylabel) в matplotlib? Например,

plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math \n continues here") 

В идеале я бы хотел, чтобы y-метка тоже была в центре. Есть ли способ сделать это? Важно, чтобы метка содержала как TeX (заключенный в '$'), так и новую строку.


person Community    schedule 17.04.2010    source источник


Ответы (4)


В вашем примере это именно то, как это делается, вы используете \n. Вам нужно снять префикс r, чтобы python не рассматривал его как необработанную строку.

person Michael Mrozek    schedule 17.04.2010
comment
Возможно, вам захочется заблаговременно дважды экранировать команды LaTeX, чтобы убедиться, что они не интерпретируются Python: xlabel('$\\Sigma$') - person Benjamin Bannier; 18.04.2010
comment
Этот ответ неверен. Вы либо дважды экранируете латекс `` в обычной строке (без r) или следуете @EOLs ответить - person aaren; 18.09.2013
comment
относительно центрирования: ylabel('this is vertical\ntest', multialignment='center') из matplotlib.org/examples/pylab_examples/multiline.html - person Faber; 02.12.2014
comment
К сожалению, ни одно из предложенных решений не работает с опцией rcParams["text.usetex"] = True - person Samuel; 25.07.2019

Вы можете получить лучшее из обоих миров: автоматическое «экранирование» команд LaTeX и новые строки:

plt.ylabel(r"My long label with unescaped {\LaTeX} $\Sigma_{C}$ math"
           "\n"  # Newline: the backslash is interpreted as usual
           r"continues here with $\pi$")

(вместо использования трех строк другой вариант — разделение строк одиночными пробелами).

На самом деле, Python автоматически объединяет строковые литералы, следующие друг за другом, и вы можете смешивать необработанные строки (r"…") и строки с интерполяцией символов ("\n").

person Eric O Lebigot    schedule 19.04.2010
comment
Просто быстрый комментарий - это было идеальное решение для простого способа пометить подграфики с помощью (a), (b) и т. д., когда эта метка должна быть ниже графика и центрирована с помощью xlabel. Таким образом, plt.tight_layout() также видит всю метку и соответствующим образом настраивается. - person SeanM; 02.07.2017
comment
Это должен быть принятый ответ. Также обратите внимание, что он работает с форматированием строк Python, например. r"$\alpha$ : {0} " "\n" r"$\beta$ : {1}".format(a, b) - person berkelem; 24.09.2018

plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math" + "\n" + "continues here")

Просто объедините строки с новой строкой, которая не находится в форме необработанной строки.

person Brothaman    schedule 07.11.2014

Следующий скрипт python matplotlib создает текст с новой строкой

ax.text(10, 70, 'shock size \n $n-n_{fd}$')

Следующее не имеет новой строки. Обратите внимание на букву r перед текстом

ax.text(10, 70, r'shock size \n $n-n_{fd}$')
person Ranaivo    schedule 28.04.2014