【问题标题】:Add multiple Figures in matplotlib with PyQt使用 PyQt 在 matplotlib 中添加多个图形
【发布时间】:2015-08-26 20:26:48
【问题描述】:

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

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

self.figure = Figure(figsize=(width, height), dpi=dpi)
Canvas.__init__(self, self.figure)

但是当我检查如何添加更多数字时,大多数在线解决方案都是使用

pyplot.figure()

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

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

【问题讨论】:

    标签: matplotlib pyqt4


    【解决方案1】:

    如果没有最小的工作 example 或不知道您正在使用哪个小部件,它的帮助有点棘手。我不确定 QtDesigner 但使用 matplotlib 图形,您可以在图形中添加一些 subplots,在这些图形上绘制初始数据(例如一条线),然后更新每个艺术家的数据(这条线)作为小部件的update 进程的一部分,例如

    为图形添加子图

    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)
    

    【讨论】:

    • 请问add_subplot()和add_axes()有什么区别?
    • @tom 从文档中,我了解到这两种方法提供了不同的定位子图或轴的方法。但从概念上讲,子图和轴是一回事,对吗?
    • @noname: 并不是说​​子图和坐标轴是一回事,而是add_subplotadd_axes 返回一个Axes 实例。它们只是实现同一目标的不同方式
    • 在我的用例中这个 add_subplot() 有问题。我希望能够通过用户单击按钮来添加新的子图,这意味着 matplotlib 图需要知道如何自动排列这些子图。知道如何实现吗?
    • 嗯,可能不是小事。这个问题可能会有所帮助:stackoverflow.com/questions/12319796/…。另外,请查看此答案以获取有关如何安排stackoverflow.com/questions/3584805/… 的详细信息。清除图形fig.clf 可能更容易,重新添加所有轴并重新绘制数据。请注意,您可以使用fig, axs = plt.subplots(3,3) 快速设置数字。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多