Существует пакет под названием 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_())