Python 如何在同一窗口中同时显示和更新两个matplotlib绘图?

Python 如何在同一窗口中同时显示和更新两个matplotlib绘图?,python,matplotlib,Python,Matplotlib,我实现了一个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

我实现了一个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())

仅更新最后一个用“plt.”调用的绘图。如何编写代码以便可以引用两个图

我还尝试创建一个绘图,其中两个图形并排显示,但由于需要独立更新图形,我遇到了更多问题。如果你能做到这一点,那就太好了!我只是想解决前面的问题可能更简单

如果你需要更多的代码,我可以发布

# #

解决方案(由于Beingernest和Ash Sharma的重要性):

用具体数字替换任何“plt.”

例如:

plt.tight_layout()      #replace with self.comparison_figure1.tight_layout()
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)
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()的代码:

我可以发布更多的代码,如果你需要它

解决方案(感谢Beingernest和Ash Sharma的重要性):

用特定图形替换任何
plt

例如:

plt.tight_layout()      #replace with self.comparison_figure1.tight_layout()
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)
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)

尝试将绘图定义为图,ax,然后更新所需变量。?此链接:将matplotlib嵌入GUI时,最好不要使用
pyplot
。这迫使您思考实际使用的对象。在这种情况下,您需要对两个对象执行操作
fig1
fig2
,因此需要调用
fig1.tight\u layout()
fig2.tight\u layout()
。问题:以前的解决方案并没有解决所有打印更新问题。虽然在使用tight_layout()时,“plt”可以替换为self.comparison_figure1,但在使用cla()清除绘图时,不能执行同样的操作。使用cla()的代码:sns.set(style=“whitegrid”)plt.cla()ax=self.comparison\u figure2.add\u子图(111)。。。。。专业提示:没有人会看到隐藏在评论中的这个问题。改为问一个新问题,并链接到此问题以供参考。