以下代码生成下图:
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()
我希望图例文本居中,即'$T_m$'
居中于第一行。我尝试过将str.format
迷你语言用于各种事情,比如
我认为这是可行的,因为下面给出了
>>> 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。在
当您发现自己的时候,关键是
multialignment
参数。但是,它不是legend
函数的参数,而只是Text Atrists的属性。所以诀窍是保存一个图例句柄,然后为每个文本元素设置这个属性:结果:
相关问题 更多 >
编程相关推荐