2014-03-19 113 views
0

我正在用PyQt4開發一個應用程序,我需要使用Matplotlib顯示圖形。爲此,我使用以下代碼,該代碼運行良好:在PyQt中嵌入matplotlib顏色條

self.PhaFig = fig.Figure() #Creation of the Figure 
self.PhaBeamCanvas = FigureCanvasQTAgg(self.PhaFig) #Creation of the display canvas 
self.AxesPhaInit = self.PhaFig.add_subplot(111, title = "Input beam phase", aspect = 'equal') #Creation of the axes object inside the Figure 
imgPha = self.AxesPhaInit.imshow(self.wf_mask,extent =[-xx/2+xx/N,xx/2,-xx/2+xx/N,xx/2]) 
self.PhaFig.colorbar(imgPha) #adding a colorbar to the graph 
self.PhaBeamCanvas.draw() #drawing on the canvas 

此圖隨着按鈕被按下時更新。圖表的更新運行良好。問題來自於顏色條。繪製新圖形時,先前的顏色條不會被刪除,並且新的顏色條會被繪製在靠近舊顏色條的位置。

我已經試過類似:

self.PhaFig.delaxes(self.AxesPhaInit) 

但是,這是行不通的。圖形被刪除,但不是彩條,下一個圖形顯示不再起作用。

有人有想法嗎?

+0

一般來說,最好用最簡單的代碼來提問,這樣可以證明問題。重複調用'fig.colorbar'也會導致添加額外的顏色條,這與您如何設置對象無關,所以這可以通過基於pyplot的示例更簡單地演示。也獨立於Qt。 – tacaswell

+0

此外,您發佈的代碼中存在一個錯誤,您爲光束強度創建了一個軸,但是正在繪製相位軸。 – tacaswell

+0

我更正了代碼中的錯誤。 –

回答

0

colorbardocs)有一個kwarg cax它在應該繪製彩條的軸上。默認的行爲是從(iirc)中的可變色圖像所在的軸上「偷走」圖中的空間。

一旦你在Axes對象上有句柄,嵌入或不嵌入就沒有區別,所以我將用非嵌入(它實際上只是預嵌入,但我離題了)演示。

fig, (ax, cax) = plt.subplots(1, 2) 
img = ax.imshow(np.random.rand(42, 42)) 
fig.colorbar(img, cax=cax) 

你顯然需要大小的cax更理智一些的彩條其他kwargs的可以與幫助。

+0

感謝您的回答。我現在明白應該引入一個單獨的軸。我現在正在努力調整尺寸。我認爲我做錯了,但我無法弄清楚什麼。我試圖在你的代碼中添加一些'kwargs',如:'fig.colorbar(img,cax = cax,shrink = 0.9',但它不起作用,但是,這是我在文檔中找到的語法... –

+0

請確保您正在閱讀正在使用的mpl版本的文檔的正確版本。 – tacaswell