将Matplotlib绘图作为QGraphicsSitem/放入QGraphicsView

2024-04-24 22:17:52 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一个非常基本的绘图布局,如下所述(为了简洁起见,更改了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 designer中设计了一个GUI,它有一个GraphicsView(名为GraphicsView_Plot),我想把这个图放到其中,我想知道如何把这个图放到GraphicsView中。除非重新开始并使用基于QT的绘图功能,否则我真的不知道如何(如果可能的话)将matplotlib绘图放到这个图形视图中。我知道如果我也能将它转换成QGraphicsView,那将是一件非常简单的事情,所以直接将它放入GraphicsView或将它转换成QGraphicsItem对我来说都是可行的


Tags: import绘图plotmatplotlibasnponelabel
1条回答
网友
1楼 · 发布于 2024-04-24 22:17:52

您必须使用一个画布,它是一个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_())

enter image description here

相关问题 更多 >