Латексная команда \ phantom не отображается в легенде matplotlib - PullRequest
0 голосов
/ 16 января 2019

У меня проблемы с получением команд \phantom и \quad LaTeX для работы в метке легенды в matplotlib.

enter image description here

В идеале я хотел бы «ПРЕД. <15% 'для выравнивания с надписью ниже, чтобы "PREV." расстановка. Я могу сделать это в документе LaTeX, используя команды <code>\phantom или \quad. Однако следующий код создает изображение, показанное выше, и я не могу понять, почему эти команды не имеют никакого эффекта.

import matplotlib
matplotlib.rcParams['hatch.color'] = '#787878'
import matplotlib.pyplot as plt
from matplotlib.patches import Patch

CB = {'OrRd': ['#fef0d9', '#fdcc8a', '#fc8d59', '#e34a33', '#b30000']}

# Plot legend
legend_labels = [r'$\phantom{LONG TEST PHRASE} \textsc{Prev.} < %i\%%$' % (15),
                 r'$%i\%% \leq \textsc{Prev.} < %i\%%$' % (15, 25),
                 r'$%i\%% \leq \textsc{Prev.} < %i\%%$' % (25, 35),
                 r'$%i\%% \leq \textsc{Prev.} < %i\%%$' % (35, 45),
                 r'$%i\%% \leq \textsc{Prev.}$' % (45)]

legend_elements = [Patch(facecolor='#86838C', label='$\\textsc{N} < 20$',)] \
                    + [Patch(facecolor='#ffffff', hatch='//', label='$20 \\leq \\textsc{N} \\leq 50$')] \
                    + [Patch(facecolor=color, label=label) for color, label in zip(CB['OrRd'], legend_labels)]
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
leg = plt.legend(handles=legend_elements, loc=2, fontsize=21,
                 frameon=False, 
                 title=r'\textsc{LEGEND}', title_fontsize=24)

plt.show()

1 Ответ

0 голосов
/ 17 января 2019

Следующее решение не идеально, но я все еще думаю, что стоит поделиться с вами. Я адаптировал ее из этой более или менее похожей проблемы, хотя проблема со связью немного отличается. Как видите, выравнивание не идеальное. Возможно, вам придется немного подправить его. Мне пришлось удалить title_fontsize из plt.legend(), так как кажется, что он не совместим с matplotlib 2.2.2.

matplotlib.rcParams['text.usetex'] = True
matplotlib.rcParams['text.latex.preview'] = True

# Plot legend
legend_labels = [r'$\quad \quad \quad  \textsc{Prev.} < %i\%%$' % (15),
                 r'$%i\%% \leq \textsc{Prev.} < %i\%%$' % (15, 25),
                 r'$%i\%% \leq \textsc{Prev.} < %i\%%$' % (25, 35),
                 r'$%i\%% \leq \textsc{Prev.} < %i\%%$' % (35, 45),
                 r'$%i\%% \leq \textsc{Prev.}$' % (45)]

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...