Поместите график Matplotlib как QGraphicsItem / в QGraphicsView - PullRequest
1 голос
/ 30 апреля 2020

Итак, у меня очень базовый c макет графика, описанный ниже (со значениями 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)

И я разработал GUI в конструкторе QT, который имеет GraphicsView (с именем graphicsView_Plot), в который я хотел бы поместить этот график, и я хотел бы знать, как бы я go о размещении этого графика в GraphicsView. Если не начинать сначала и использовать графические возможности на основе QT, я не знаю, как (если возможно) поместить график matplotlib в это графическое представление. Я знаю, что было бы очень просто, если бы я мог также преобразовать его в QGraphicsItem, так что или непосредственное помещение его в GraphicsView или преобразование его в QGraphicsItem будет работать для меня.

1 Ответ

1 голос
/ 30 апреля 2020

Вы должны использовать холст, который является 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...