2014-04-15 66 views
0

我在PySide應用程序中嵌入了matplotlib圖形。我試圖向用戶公開一些功能(通過gui按鈕等)來幫助他們自定義圖形。如何在嵌入matplotlib圖形時更新座標軸限制?

我無法得到時告知x和y軸極限更新。我有這樣的功能:

def set_xlimits(self, lower, upper): 
    """ Convenience method to canvas.axes.set_xlim """ 
    self.canvas.axes.set_xlim(lower, upper) 
    self.canvas.draw() 

其中axesmatplotlib.axes.Axes實例和canvasFigureCanvasQTAgg

當我調用此方法繼承的,與新的限制,無論是什麼都不會發生或新的蜱被添加到軸,但沒有新的刻度標記(即,如果從0,1限制更改爲0.10,它仍然會繼續從0-1標記,但超出1一些額外的蜱)

如何始終執行任何想法更改?

編輯: 看來,軸限制更新,但蜱蟲都沒有。所以,如果我將限制更改爲0-16,那麼ticks仍然會保持0-1,但範圍0-16中的所有數據都會顯示出來!

當我隨後調用另一個方法,像這樣的編輯的蜱標籤字體:

def set_tick_font(self, font): 
    self.canvas.axes.set_xticklabels(self.canvas.axes.get_xticks(), **font) 
    self.canvas.axes.set_yticklabels(self.canvas.axes.get_yticks(), **font) 
    self.canvas.draw() 

先前調用來更新軸界限最終繪製。這不是理想的 - 它應該是第一次繪製。任何想法是怎麼回事?

+1

,除非你真的確定你在做什麼,不要使用'SET_ * ticklabels'。它將您的刻度標籤與您的數據分離是固有危險的。 – tacaswell

+0

雖然很模糊,但你說得對。調查MPL源代碼,使用的get_的組合後* ticklabels()和set_fontproperties允許在不從數據解耦(並因此防止SET_ * LIM方法從正確更新)被改變刻度標記標籤 – jramm

回答

0

由於tcaswell暗示,似乎我的第二個方法 - 設置刻度字體,在某種程度上防止set_xlim和set_ylim方法無法正常工作。

我還需要看看它是如何工作的,但現在,改變了第二種方法:

def set_tick_font(self, font): 
    fnt = font_manager.FontProperties(**font) 
    for labelx, labely in zip(self.canvas.axes.get_xticklabels(), self.canvas.axes.get_yticklabels()): 
     labelx.set_fontproperties(fnt) 
     labely.set_fontproperties(fnt) 
    self.canvas.draw() 

意味着調用set_xlimits方法時的限制現在將正確地更新和我仍然可以獨立更改刻度標籤字體。

相關問題