2013-03-26 164 views
16

在matplotlib中,如何调整图例标题的对齐方式?它始终居中,但我需要将它与图例框左对齐。我试图改变标题的文字艺术家的排列没有效果。有关详细信息,请参阅以下示例:matplotlib:图例标题对齐

from pylab import * 

x = linspace(0, 1) 
plot(x, x, label="1") 
plot(x, x**2, label="2") 
plot(x, x**3, label="3") 
plot(x, sqrt(x), label="square root") 

l = legend(title="Title", loc="best") 
l.get_title().set_ha("left")    # <== does not work 

show() 

问题归结为什么和谁控制标题对齐的锚点?将对齐方式更改为“右”或“中”具有显着的效果。第二个观察:对于长标题字符串,定位点移动到图例框的左边界...

+0

默认情况下,标题文本实际上是“左对齐”。对齐的锚点位于图例框的中心。可以指定一个不同的锚点吗?也许有一个与Legend相关的VPacker或HPacker实例? – Erwin411 2013-03-26 14:14:29

+0

对于我目前的情况,我有一个解决方案:简单地说'l.get_title()。set_ha(“center”)'。文本然后以神秘的锚点(大致位于句柄和标签文本之间)为中心,并且看起来不错。然而,对于“非常超长的标题”而言,定位点移动到框的左边界... – Erwin411 2013-03-26 14:23:04

+0

有与set_ha('左')相同的问题'不起作用 – 2015-03-19 22:03:19

回答

5

我认为您需要使用set_position((x, y))方法替换Text对象。 xy的单位是像素,因此您必须试验什么值看起来正确,或者使用Transform。我不确定哪个组合Transforms可能最有用。因此,在短期

,这样的事情可能工作:

l.get_title().set_position((-10, 0)) # -10 is a guess 
+3

谢谢! set_position()确实会移动标题。但是,我不想硬连线移位,而是从箱子范围计算它。这似乎变得相当... – Erwin411 2013-03-26 14:11:46

6

您可以对齐完整图例框设置leg._legend_box.align。这将对齐图例框内的所有内容,但效果是希望在框的两侧而不是中心上显示标题。

  • 左对齐

    leg = plt.legend(title="Title") 
    leg._legend_box.align = "left" 
    

    enter image description here

  • 右对齐

    leg = plt.legend(title="Title") 
    leg._legend_box.align = "right" 
    

    enter image description here