Подчеркивание текста в легенде matplotlib

Мне нужно, чтобы немного текста было подчеркнуто в моей легенде. Я нашел ответ на вопрос здесь, но я совсем не понимаю LaTeX. Мне нужно подчеркнуть «Содержание, определенное по гамма-спектроскопии» в легенде (строка 53 кода). Я попытался сделать следующее из ссылки:

r'\underline{Content determined from gamma spectroscopy} ',

но этот точный текст просто появляется в легенде. Как именно я могу подчеркнуть текст?

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

eu_cl = 0.1
co_cl = 2.0

ca_eu_gs = 0.05 / eu_cl
ca_co_gs = 0.46 / co_cl
fa_eu_gs = 0.11 / eu_cl
fa_co_gs = 0.76 / co_cl
ce_eu_gs = 0.03 / eu_cl
ce_co_gs = 0.26 / co_cl

ca_eu_ms = 0.04 / eu_cl
ca_co_ms = 1.05 / co_cl
fa_eu_ms = 0.01 / eu_cl
fa_co_ms = 1.85 / co_cl
ce_eu_ms = 0.08 / eu_cl
ce_co_ms = 1.44 / co_cl

y_co = [1,1,1,1,1,1,1e-1,1e-2,1e-3,0]
x_co = [0,1e-4,1e-3,1e-2,1e-1,1e0,1e0,1e0,1e0,1e0]
#y_eu = [0, 1e-3, 1e-2, 1e-1, 1e0]
#x_eu = [1,1,1,1,1] 

plt.rcParams['legend.loc'] = 'best'
plt.figure(1)
plt.ylim(1e-3, 1e4)
plt.xlim(1e-4, 1e3)
#plt.autoscale(enable=True, axis='y', tight=None)
#plt.autoscale(enable=True, axis='x', tight=None)
ca_gs = plt.scatter(ca_eu_gs, ca_co_gs, color='b', marker='o')

fa_gs = plt.scatter(fa_eu_gs, fa_co_gs, color='r', marker='o')

ce_gs = plt.scatter(ce_eu_gs, ce_co_gs, color='m', marker='o')

ca_ms = plt.scatter(ca_eu_ms, ca_co_ms, color='b', marker='^')

fa_ms = plt.scatter(fa_eu_ms, fa_co_ms, color='r', marker='^')

ce_ms = plt.scatter(ce_eu_ms, ce_co_ms, color='m', marker='^')

extra = Rectangle((0, 0), 1, 1, fc="w", fill=False, edgecolor='none', linewidth=0)
extra1 = Rectangle((0, 0), 1, 1, fc="w", fill=False, edgecolor='none', linewidth=0)

clearance, = plt.plot(x_co, y_co, color='g')
#plt.plot(x_eu, y_eu, color='g')

plt.loglog()
plt.xlabel('Europium (ppm)')
plt.ylabel('Cobalt (ppm)')
plt.legend([extra, ca_gs, fa_gs, ce_gs, extra1, ca_ms, fa_ms, ce_ms , clearance], ("Content determined from gamma spectroscopy" ,
            "Coarse aggregate","Fine aggregate","Cement","Content determined from ICP-MS","Coarse aggregate","Fine aggregate","Cement","D/C = 1")
             , scatterpoints = 1)
print('plots created')
plt.show()

РЕДАКТИРОВАТЬ:

Я добавил следующее, как указано в комментариях, чтобы включить LaTeX.

rc('text', usetex=True)

Но это приводит к целой цепочке ошибок, заканчивающейся следующей ошибкой:

RuntimeError: LaTeX was not able to process the following string:
'$10^{-4}$'
Here is the full report generated by LaTeX: 

Я предполагаю, что это потому, что теперь мне нужно форматировать весь текст с помощью LaTeX. Есть ли способ отформатировать некоторые из них с помощью LaTex. У меня просто нет опыта в этом, и сейчас действительно не лучшее время, чтобы научиться этому (хотя когда-нибудь я это сделаю).


person Bogdan Janiszewski    schedule 08.03.2014    source источник
comment
Какая у вас ОС? Кажется, у вас не хватает некоторых латексных пакетов.   -  person max taldykin    schedule 09.03.2014


Ответы (2)


Это не сработало, потому что вы пропустили

 from matplotlib import rc

 rc('text', usetex=True)

часть ответа. LaTeX — это язык разметки, на самом деле очень продвинутый.

Если вы не хотите углубляться в это, вы, вероятно, можете просто установить стиль текста для легенды, используя параметр matplotlib, но он будет применяться ко всему в легенде.

person aruisdante    schedule 08.03.2014
comment
Если я добавлю это, то получу следующую ошибку: RuntimeError: LaTeX не смог обработать следующую строку: '$10^{-4}$' Вот полный отчет, сгенерированный LaTeX: В отчете ничего не генерируется. Я предполагаю, что это потому, что ВЕСЬ текст должен быть отформатирован с помощью LaTeX, что я точно не знаю, как это сделать. - person Bogdan Janiszewski; 09.03.2014

Вам необходимо активировать рендеринг LaTeX:

plt.rc('text', usetex=True)

См. дополнительную информацию о рендеринге LaTeX здесь: http://matplotlib.org/users/usetex.html

Что касается вашего редактирования о том, что «LaTeX не смог обработать следующую строку».
Вам не нужно как-то переформатировать весь ваш текст. Обычный текст уже находится в формате LaTeX, и, как видно из сообщения об ошибке, matplotlib автоматически преобразует числовые значения в формат LaTeX (например, 1e-4 в $10^{-4}$).

Я думаю, что проблема в некоторых отсутствующих пакетах. Если вы используете Ubuntu, обязательно установите пакеты dvipng, texlive-latex-extra и texlive-math-extra.

person max taldykin    schedule 08.03.2014