Latex \ phantom命令未在matplotlib图例中呈现

时间:2019-01-16 20:03:58

标签: matplotlib latex legend

我无法让\phantom\quad LaTeX命令在matplotlib的图例标签中工作。

enter image description here

理想情况下,我想购买PREV。 <15%”以与下面的标签对齐,以使“ PREV”。排队。我可以使用\phantom\quad命令在LaTeX文档中执行此操作。但是,以下代码产生了上面显示的图像,我无法弄清楚为什么这些命令没有任何作用。

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 :(得分:1)

以下解决方案并不完美,但我仍然值得与您分享。尽管链接问题稍有不同,我还是从this的相似问题改编而成。如您所见,对齐方式并不完美。您可能需要稍微调整一下。我不得不从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