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

时间:2018-06-20 08:16:21

标签: 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 = 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”调用的情节。已更新。如何编写我的代码,以便可以引用两个图。

我还尝试创建一个绘图,在该绘图中两个图并排显示,但是由于需要独立更新图,因此遇到了更多问题。如果您能够使其那样工作,那就太好了!我只是想解决以前的问题可能会更简单。

如果您需要更多代码,我可以发布!

# #

解决方案(感谢BeingErnest和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()时可以用self.comparison_figure1替换“ plt”,但是在使用cla()清除图时,则无法完成此操作。

我在使用cla()的代码:

sns.set(style="whitegrid")
plt.cla()
ax = self.comparison_figure2.add_subplot(111)
.....
.....

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

1 个答案:

答案 0 :(得分:1)

解决方案(感谢BeingErnest和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)