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 = 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/

相关文章:

python - 我写这段代码是为了在 5 个等级中取平均值并根据平均值显示一条消息,它正在运行

python - pip安装中文服务器ssl错误

python - Tkinter - 在带有自动换行的文本小部件中计算行数

python - 获取 histogram2d 的每个 bin 中的频率

python - 基于第三个变量的带有颜色条的 2 个变量的散点图

python - 在 python 中绘制自定义图表

python - 将数据框的所有数字列转换为绝对值

python - 如何在 SQLite 表中存储 Python 函数?

python - 如何在条形图上添加值标签

python - Pandas : plot stacked barchart for row values