2016-07-04 107 views
2

默認情況下,matplotlib將軸標籤繪製在軸的中心。我想移動標籤,使其與軸的端部對齊,無論是水平還是垂直軸。例如,對於橫軸我想看看:如何將軸標籤對齊

+--------------------+ 
|     | 
|     | 
|     | 
|     | 
|     | 
+--------------------+ 
       label 

難道不可能性與matplotlib的全局設置做呢?

回答

7

OK,我會獨自離開我的其他答案(1),但這是一個好

... 
plt.xlabel('x_description', horizontalalignment='right', x=1.0) 
plt.ylabel('y_description', horizontalalignment='right', y=1.0) 
... 

,你可以看到,沒有更多的幻數,並都爲xlabelylabel工作。

注意,在這兩種情況下,我們要改變水平排列,對於最終都清楚地知道,當我第一次改變了ylabel垂直對齊的原因...


(1),因爲獲取對象,修改對象並將其設置回來的想法本身就是一個好主意,不是嗎?

+1

無法編輯6字符限制的becauce,應該有'plt.xlabel('x description',horizo​​ntalalignment ='right',x = 1.0)' – anatol

+0

@anatol交換'horizo​​ntalalignment'和'x' /'y'(在這兩個聲明中) - 這是超過6個字符...並感謝您抓住我的錯誤! – gboffi

2

一個特設的解決方案,即引入了魔法值25,我不很瞭解,至少可以說,是

plt.xlabel('pollo', horizontalalignment='right', position=(1,25)) 

一個更明智的方法是使用哪個y位置axes.xaxis有choosen ......有了這種想法的一個健全的過程通常是這樣

  1. 是使用父容器的.get_object(...)方法獲取對象
  2. 使用其.set_object(...)方法

在我們的情況下修改的對象

  • 更新父,我們做的情節,那麼我們得到的當前軸ax,裏面有包含其位置和排列,我們希望labelxaxis修改。

    ... 
    plt.xlabel('...') 
    ... 
    ax = plt.gca() 
    label = ax.xaxis.get_label() 
    x_lab_pos, y_lab_pos = label.get_position() 
    label.set_position([1.0, y_lab_pos]) 
    label.set_horizontalalignment('right') 
    ax.xaxis.set_label(label) 
    ... 
    plt.show() 
    

    對於直接matplotlib的違約行事,我瀏覽了plt.rcParams數據結構,但我還沒有發現任何有用的東西。當然,這並不意味着這是不可能的,只是我看不到一個可行的解決方案。

  • +0

    我想知道是否可以通過matplotlib的全局設置來做到這一點 –