Matplotlib legend LaTeX tex的多行对齐

2024-04-20 14:17:36 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码生成下图:

import numpy as np
import matplotlib.pyplot as plt

xs = np.random.rand(100)
ys = np.random.rand(100)
r, p = 0.930, 1e-5
label = '$T_m$\n$\\rho = %.3f, p = %.1e$'%(r, p)

fig, ax = plt.subplots()
ax.scatter(xs, ys, label=label)
ax.legend()
plt.show()

enter image description here

我希望图例文本居中,即'$T_m$'居中于第一行。我尝试过将str.format迷你语言用于各种事情,比如

^{pr2}$

我认为这是可行的,因为下面给出了

>>> print ax.get_legend_handles_labels()
([<matplotlib.collections.PathCollection object at 0x7fa099286590>],
 [u'     $\\Delta T_{m}$      \n$\\rho=0.930, p=1.2 \\times 10^{-5}$'])

但是标签中的空格被去掉了。我不能为填充字符使用任何乳胶空间('\;'或{}),因为它们是多个字符。我还尝试在不同的地方使用multialignment='center'关键字,但它不是一个有效的kwarg to ax.legend。在

如何在图例文本中居中对齐多行?最后,我将使用多个图例句柄,其中标签文本可以在第二行(如图所示)中包含更多字符,也可以在第一行中包含更多字符(与此相反)。在

我使用的是python2.7.6和matplotlib 1.4.3。在


Tags: 文本importmatplotlibasnppltrandomax
1条回答
网友
1楼 · 发布于 2024-04-20 14:17:36

当您发现自己的时候,关键是multialignment参数。但是,它不是legend函数的参数,而只是Text Atrists的属性。所以诀窍是保存一个图例句柄,然后为每个文本元素设置这个属性:

leg = ax.legend()
for t in leg.texts:
    t.set_multialignment('center')

结果:

enter image description here

相关问题 更多 >