Python 将Matplotlib绘图作为QGraphicsSitem/放入QGraphicsView

Python 将Matplotlib绘图作为QGraphicsSitem/放入QGraphicsView,python,matplotlib,pyqt,Python,Matplotlib,Pyqt,因此,我有一个非常基本的绘图布局,如下所述(为了简洁起见,更改了x和y值): 我在QT designer中设计了一个GUI,它有一个GraphicsView(名为GraphicsView_Plot),我想把这个图放到其中,我想知道如何把这个图放到GraphicsView中。除非重新开始并使用基于QT的绘图功能,否则我真的不知道如何(如果可能的话)将matplotlib绘图放到这个图形视图中。我知道如果我也能将其转换为QGraphicsView,这将是一件非常简单的事情,因此直接将其放入Graph

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


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

您必须使用一个画布,它是一个QWidget,可以渲染matplotlib指令,然后使用
addWidget()将其添加到场景中
方法(或通过QGraphicsProxyWidget):

导入系统 从PyQt5导入QtWidgets 从matplotlib.figure导入图形 从matplotlib.backends.backend_qt5agg导入FigureCanvas qtagg as FigureCanvas 将numpy作为np导入 如果名称=“\uuuuu main\uuuuuuuu”: app=qtwidts.QApplication(sys.argv) scene=qtwidts.qgraphicscene() view=QtWidgets.QGraphicsView(场景) 图=图() 轴=图.gca() 轴。设置标题(“我的绘图”) x=np.linspace(1,10) y=np.linspace(1,10) y1=np.linspace(11,20) 坐标轴绘图(x,y,“-k”,label=“第一个”) 坐标轴绘图(x,y1,“-b”,标签=“第二个”) 轴。图例() 轴网格(真) 画布=图画布(图) proxy\u widget=scene.addWidget(画布) #或 #proxy_widget=qtwidts.QGraphicsProxyWidget() #代理_widget.setWidget(画布) #scene.addItem(代理_小部件) 查看。调整大小(640480) view.show() sys.exit(app.exec_())

将Matplotlib的画布(它本身就是一个小部件)嵌入到Qt应用程序中可能更容易—请看示例代码。
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)