将 Matplotlib 图作为 QGraphicsItem/放入 QGraphicsView

2024-03-31

因此,我有一个非常基本的绘图布局,如下所述(为简洁起见,更改了 x 和 y 值):

import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np

figure = Figure()
axes = figure.gca()
axes.set_title(‘My Plot’)
x=np.linspace(1,10)
y=np.linspace(1,10)
y1=np.linspace(11,20)
axes.plot(x,y,’-k’,label=‘first one’)
axes.plot(x,y1,’-b’,label=‘second one’)
axes.legend()
axes.grid(True)

我在QT设计器中设计了一个GUI,它有一个GraphicsView(名为graphicsView_Plot),我想将这个图形放入其中,并且我想知道如何将此图形放入GraphicsView中。除非重新开始并使用基于 QT 的绘图功能,否则我真的不知道如何(如果可能的话)将 matplotlib 图放入此图形视图中。我知道如果我也可以将其转换为 QGraphicsItem,那将是一件非常简单的事情,因此直接将其放入 GraphicsView 或将其转换为 QGraphicsItem 对我来说都可以。


您必须使用作为 QWidget 的画布来呈现 matplotlib 指令,然后使用将其添加到场景中addWidget()方法(或通过 QGraphicsProxyWidget):

import sys

from PyQt5 import QtWidgets

from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

import numpy as np

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    scene = QtWidgets.QGraphicsScene()
    view = QtWidgets.QGraphicsView(scene)

    figure = Figure()
    axes = figure.gca()
    axes.set_title("My Plot")
    x = np.linspace(1, 10)
    y = np.linspace(1, 10)
    y1 = np.linspace(11, 20)
    axes.plot(x, y, "-k", label="first one")
    axes.plot(x, y1, "-b", label="second one")
    axes.legend()
    axes.grid(True)

    canvas = FigureCanvas(figure)
    proxy_widget = scene.addWidget(canvas)
    # or
    # proxy_widget = QtWidgets.QGraphicsProxyWidget()
    # proxy_widget.setWidget(canvas)
    # scene.addItem(proxy_widget)

    view.resize(640, 480)
    view.show()

    sys.exit(app.exec_())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Matplotlib 图作为 QGraphicsItem/放入 QGraphicsView 的相关文章

随机推荐