2013-03-26 146 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