我正在使用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
按下按钮时会更新此图表。图表的更新效果很好。问题来自colorbar。绘制新图形时,不会删除上一个颜色条,而是将旧图形绘制在旧图形附近。
我尝试过类似的事情:
self.PhaFig.delaxes(self.AxesPhaInit)
但这不起作用。图表被删除但不是彩条,下一个图表显示不再有效。
有人有想法吗?
答案 0 :(得分:0)
colorbar
(docs)有一个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
可以帮助您实现这一目标。
答案 1 :(得分:0)
我想我参加这个聚会有点晚了,但是我找到了一种解决这个问题的超级简单的方法(这是我在自己的应用程序中遇到的)。
每次在pyqt应用程序中更新或重绘绘图时,请致电:
self.PhaFig.clf()
然后添加您的绘画和绘画等。
令人难以置信...就这么简单!只需使用clf即可消除之前包含的内容,从而刷新图形。
至少,这在PyQt5中对我有用。