我正在使用Spyder,但似乎无法找出如何从控制台输出到对话框显示文本输出。救命。
如何显示从控制台输出到PyQT对话框的文本以及生成的图形?
下面的代码运行一个心脏病预测程序,其结果由生成的图形表示并显示在PyQT窗口中。但是,我们还需要对结果进行解释才能显示在对话框中,但似乎无法弄清楚。请帮忙。
import sys
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout
from numpy import genfromtxt
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVC
from sklearn.decomposition import PCA
import pylab as pl
from itertools import cycle
from sklearn import cross_validation
from sklearn.svm import SVC
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
import random
class Window(QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
# a figure instance to plot on
self.figure = plt.figure()
# this is the Canvas Widget that displays the `figure`
# it takes the `figure` instance as a parameter to __init__
self.canvas = FigureCanvas(self.figure)
# this is the Navigation widget
# it takes the Canvas widget and a parent
self.toolbar = NavigationToolbar(self.canvas, self)
# Just some button connected to `plot` method
self.button = QPushButton('Plot the data')
self.button.clicked.connect(self.my_model)
# set the layout
layout = QVBoxLayout()
layout.addWidget(self.toolbar)
layout.addWidget(self.canvas)
layout.addWidget(self.button)
self.setLayout(layout)
#Method to plot the graph for reduced Dimesions
def plot_2D(self,data, target, target_names,ax):
colors = cycle('rgbcmykw')
target_ids = range(len(target_names))
for i, c, label in zip(target_ids, colors, target_names):
ax.scatter(data[target == i, 0], data[target == i, 1],
c=c, label=label)
plt.legend()
plt.savefig('Reduced_PCA_Graph')
def my_model(self):
''' plot some random stuff '''
#Loading and pruning the data
dataset = genfromtxt('cleveland_data.csv',dtype = float, delimiter=',')
#print dataset
X = dataset[:,0:12] #Feature Set
y = dataset[:,13] #Label Set
# Classifying the data using a Linear SVM and predicting the probability of disease belonging to a particular class
modelSVM = LinearSVC(C=0.001)
pca = PCA(n_components=5, whiten=True).fit(X)
X_new = pca.transform(X)
# calling plot_2D
target_names = ['0','1','2','3','4']
# create an axis
ax = self.figure.add_subplot(111)
# discards the old graph
ax.clear()
self.plot_2D(X_new, y, target_names,ax)
# refresh canvas
self.canvas.draw()
#Applying cross validation on the training and test set for validating our Linear SVM Model
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X_new, y, test_size=0.4, train_size=0.6, random_state=0)
modelSVM = modelSVM.fit(X_train, y_train)
print("Testing Linear SVC values using Split")
print(modelSVM.score(X_test, y_test))
# printing the Likelihood of disease belonging to a particular class
# predicting the outcome
count0 = 0
count1 = 0
count2 = 0
count3 = 0
count4 = 0
for i in modelSVM.predict(X_new):
if i == 0:
count0 = count0+1;
elif i == 1:
count1 = count1+1;
elif i == 2:
count2 = count2+1;
elif i == 3:
count3 = count3+1;
elif modelSVM.predict(i) ==4:
count4 = count4+1
total = count0+count1+count2+count3+count4
#Predicting the Likelihood
#Applying the Principal Component Analysis on the data features
modelSVM2 = SVC(C=0.001,kernel='rbf')
#Applying cross validation on the training and test set for validating our Linear SVM Model
X_train1, X_test1, y_train1, y_test1 = cross_validation.train_test_split(X_new, y, test_size=0.4, train_size=0.6, random_state=0)
modelSVM2 = modelSVM2.fit(X_train1, y_train1)
print("Testing with RBF using split")
print(modelSVM2.score(X_test1, y_test1))
#Using Stratified K Fold
skf = cross_validation.StratifiedKFold(y, n_folds=5)
for train_index, test_index in skf:
# print("TRAIN:", train_index, "TEST:", test_index)
X_train3, X_test3 = X[train_index], X[test_index]
y_train3, y_test3 = y[train_index], y[test_index]
modelSVM3 = SVC(C=0.001,kernel='rbf')
modelSVM3 = modelSVM3.fit(X_train3, y_train3)
print("Testing using stratified with K folds")
print(modelSVM3.score(X_test3, y_test3))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Window()
main.show()
sys.exit(app.exec_())
上面的代码在一个对话框中输出预测变量图,现在我们只需要显示其文本解释即可