簡體   English   中英

在 PyQt 中嵌入 matplotlib 顏色條

[英]Embed matplotlib colorbar in PyQt

我正在使用 PyQt4 開發一個應用程序,我需要在其中使用 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)

但這不起作用。 圖形被刪除,但顏色條不刪除,下一個圖形顯示不再起作用。

有人有想法嗎?

colorbar ( docs ) 有一個 kwarg cax ,它位於應該繪制顏色cax的軸上。 默認行為是從 (iirc) 顏色映射所在的軸“竊取”圖中的空間。

一旦您處理了Axes對象,嵌入或不嵌入就沒有區別了,所以我將用非嵌入(這實際上只是預嵌入,但我離題了)進行演示。

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

顯然,您cax更明智地cax大小,而cax條上的其他一些kwargs可以幫助解決此問題。

我想我參加這個聚會有點晚了,但我找到了一個超級簡單的方法來解決這個問題(我在自己的應用程序中遇到了這個問題)。

每次在 pyqt 應用程序中更新或重繪繪圖時,調用:

self.PhaFig.clf()

然后添加你的 suplots 和 draw 等。

難以置信……就這么簡單! 僅使用 clf 即可通過擺脫之前包含的內容來刷新數字。

至少,這在 PyQt5 中對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM