Как встроить scikitplot в PyQt? - PullRequest
0 голосов
/ 25 января 2019

Существует пакет под названием scikitplot, в котором есть несколько инструментов, которые очень полезны для моего приложения.Он имеет возможность строить некоторые конкретные графики автоматически, просто вызывая одну функцию.Проблема в том, что мне нужно встроить эти графики в окно PyQt.Я знаю, что при работе с matplotlib это можно сделать с помощью бэкэнда PyQt.Однако в этом случае я действительно не знаю, как действовать из-за того, что функции scikitplot возвращают каждый график, и я не знаю, как добавить существующий график в виджет рисунка.

Код должен быть примерно таким (он, очевидно, не работает, но я надеюсь, что это поможет объяснить мою проблему):

import sys
from PyQt5 import QtWidgets
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import scikitplot as skplt
from sklearn.naive_bayes import GaussianNB

class ExampleWindow(QtWidgets.QMainWindow):        
    def __init__(self, parent=None):
        super().__init__(parent)
        self._main = QtWidgets.QWidget()
        self.setCentralWidget(self._main)

        ## Lines to make minimal example
        X, y = load_breast_cancer(return_X_y=True)
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
        nb = GaussianNB()
        nb.fit(X_train, y_train)
        predicted_probas = nb.predict_proba(X_test)

        ## The plots I want to show in the window
        ## It doesn't work because they aren't widgets, but I hope you get the idea
        plot1 = skplt.metrics.plot_cumulative_gain(y_test, predicted_probas)
        plot2 = skplt.metrics.plot_roc(y_test, predicted_probas)

        layout = QtWidgets.QHBoxLayout()
        layout.addWidget(plot1)
        layout.addWidget(plot2)
        self.setLayout(layout)
        self.showMaximized()

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    ex = ExampleWindow()
    ex.show()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 25 января 2019

Вам нужно будет создать оси внутри вашего приложения и передать их функции построения графиков.

    self.figure1 = matplotlib.figure.Figure()
    self.canvas1 = FigureCanvas(self.figure1)
    self.toolbar1 = NavigationToolbar(self.canvas1, self)
    self.ax1 = self.figure1.add_subplot(111)
    layout.addWidget(self.canvas1)
    layout.addWidget(self.toolbar)

    plot1 = skplt.metrics.plot_cumulative_gain(y_test, predicted_probas, ax=self.ax1)

То же самое для второго сюжета.

Обратите внимание, что это написано на макушке без тестирования, поскольку у меня нет scikitplot в наличии.

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