我已经实现了一个显示两个下拉菜单的 GUI,您可以在其中选择要显示的两组不同的图表。但是,当我使用以下代码创建图表时:
import matplotlib.pyplot as plt
from matplotlib.backends.backedn_qt4agg import FigureCanvasQTAgg as FigureCanvas
self.comparison_figure1 = plt.figure(figsize=(15,5))
self.comparison_canvas1 = FigureCanvas(self.comparison_figure1)
self.comparison_figure2 = plt.figure(figsize=15,5))
self.comparison_canvas2 = FigureCanvas(self.comparison_figure2)
然后我尝试更新绘图(例如 plt.tight_layout())
def on_resize(event):
plt.tight_layout()
self.comparison_canvas2.draw()
self.comparison_canvas1.draw() #this would do nothing
cid = self.comparison_canvas2.mpl_connect('resize_event', on_resize)
只有最后一个情节用“plt”调用。已更新。如何编写我的代码以便我可以引用这两个图。
我还尝试创建一个图,其中并排显示两个图,但由于需要独立更新图,我遇到了更多问题。如果您能够让它以这种方式工作,那就太好了!我只是在想,解决之前的问题可能更简单。
如果您需要更多代码,我可以发布!
# #
解决方案(感谢 ImportanceOfBeingErnest 和 Ash Sharma):
替换任何“plt”。有具体的图
例如:
plt.tight_layout() #replace with self.comparison_figure1.tight_layout()
所以这是一些固定的代码:
def on_resize(event):
self.comparison_figure1.tight_layout()
self.comparison_figure2.tight_layout()
self.comparison_canvas1.draw()
self.comparison_canvas2.draw()
cid = self.comparison_canvas2.mpl_connect('resize_event', on_resize)
# #
问题:
以前的解决方案并未解决所有情节更新问题。虽然在使用 tight_layout() 时可以将“plt”替换为 self.comparison_figure1,但在使用 cla() 清除绘图时不能这样做。
我使用 cla() 的代码:
sns.set(style="whitegrid")
plt.cla()
ax = self.comparison_figure2.add_subplot(111)
.....
.....
如果您需要,我可以发布更多代码!
最佳答案
解决方案(感谢 ImportanceOfBeingErnest 和 Ash Sharma):
用具体数字替换任何plt
例如:
plt.tight_layout() #replace with self.comparison_figure1.tight_layout()
所以这是一些固定的代码:
def on_resize(event):
self.comparison_figure1.tight_layout()
self.comparison_figure2.tight_layout()
self.comparison_canvas1.draw()
self.comparison_canvas2.draw()
cid = self.comparison_canvas2.mpl_connect('resize_event', on_resize)
关于python - 如何在同一窗口中同时显示和更新两个 matplotlib 图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50943483/