使用PyQt在matplotlib中添加多个图形

使用PyQt在matplotlib中添加多个图形,matplotlib,pyqt4,Matplotlib,Pyqt4,我在用QtDesigner和PyQt4设计GUI。首先,在QtDesigner中,我向GUI添加了一个matplotlib小部件。然后在代码中,我想添加多个嵌入式图形以并行显示 我检查了PyQt4附带的MatplotlibWidget类的给定代码。它使用以下代码创建图形 self.figure = Figure(figsize=(width, height), dpi=dpi) Canvas.__init__(self, self.figure) 但当我检查如何添加更多数字时,大多数在线解决方

我在用QtDesigner和PyQt4设计GUI。首先,在QtDesigner中,我向GUI添加了一个matplotlib小部件。然后在代码中,我想添加多个嵌入式图形以并行显示

我检查了PyQt4附带的MatplotlibWidget类的给定代码。它使用以下代码创建图形

self.figure = Figure(figsize=(width, height), dpi=dpi)
Canvas.__init__(self, self.figure)
但当我检查如何添加更多数字时,大多数在线解决方案都是使用

pyplot.figure()
但这不适合我的情况,因为它会创建独立的对话框。我希望新图形嵌入到我当前的GUI中

任何人都知道如何在不使用pyplot的情况下添加新图形吗?

不需要最少的工作,也不知道您使用的是哪个小部件。这有点棘手。我不确定QtDesigner是否正确,但使用
matplotlib
图,您可以向图中添加许多
子图,在这些图上绘制初始数据(例如一行),然后作为小部件
更新
过程的一部分更新每个艺术家(该行)的数据,例如

在图中添加子图

ax1 = self.figure.add_subplot(2,1,1)
ax2 = self.figure.add_subplot(2,1,2)
在每一条上画一条初始线

l1, = ax1.plot(np.linspace(0,10,100),np.linspace(0,2,100))
l2, = ax2.plot(np.linspace(0,10,100),np.linspace(0,2,100))
通过从窗口小部件更改val来更新行

def update(val):
    l1.set_ydata(val)
    l2.set_ydata(val)
widget.on_changed(update)
其中更新绑定到小部件

def update(val):
    l1.set_ydata(val)
    l2.set_ydata(val)
widget.on_changed(update)

请问add_subplot()和add_axes()的区别是什么?@tom从文档中,我了解到这两种方法提供了定位子地块或轴的不同方法。但从概念上讲,子地块和轴是同一件事,对吗?@noname:不是子地块和轴是同一件事,而是
add_子地块
add_轴
返回一个
axes
实例。它们只是实现相同内容的不同方式在我的用例中,这个add_subplot()有一个问题。我希望能够通过用户单击按钮添加新的子图,这意味着matplotlib图需要知道如何自动排列这些子图。你知道怎么才能做到吗?嗯,可能不是小事。这个问题可能有帮助:。此外,请查看此答案,了解如何安排的详细信息。清除图
fig.clf
,再次添加所有轴并重新打印数据可能更容易。注:您可以使用
fig,axs=plt.子批次(3,3)
快速设置图形。