예제 #1
0
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_main_window()
        self.ui.setupUi(self)

        # Application variables

        self.model = ListModel()
        self.well_dataframes_dict = {}

        self.decline_curves_dict = {}
        self.model_oil_curves = ListModel()
        self.model_gas_curves = ListModel()

        # Cashflow models

        self.model_cashflow_monthly = TableModel()
        self.model_cashflow_annual = TableModel()
        self.model_cashflow_summary = TableModel()

        # Production Plot setup

        self.widget_production_plot = DynamicMplCanvas(
            self.ui.widgetProductionPlot)
        toolbar = NavigationToolbar2QT(self.widget_production_plot,
                                       self.ui.widgetProductionPlot)

        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(toolbar)
        layout.addWidget(self.widget_production_plot)

        self.ui.widgetProductionPlot.setLayout(layout)

        self.ui.comboBoxPhase.addItems(["Oil", "Gas"])
        self.ui.comboBoxUnits.addItems(["BOPM/MCFPM", "BOPD/MCFPD"])
예제 #2
0
    def __init__(self, **kwargs: Any):
        BaseWidget.__init__(self, **kwargs)
        self.setupUi(self)

        # variables
        self.new_data = False
        self.data_filename: Optional[str] = None
        self.data: Optional[fits.HDUList] = None

        # before first update, disable mys
        self.setEnabled(False)

        # add image panel
        self.imageLayout = QtWidgets.QVBoxLayout(self.tabImage)
        if isinstance(self.module, IImageGrabber):
            self.imageView = QFitsWidget()
            self.imageLayout.addWidget(self.imageView)
        elif isinstance(self.module, ISpectrograph):
            self.figure, self.ax = plt.subplots()
            self.canvas = FigureCanvas(self.figure)
            self.plotTools = NavigationToolbar2QT(self.canvas, self.tabImage)
            self.imageLayout.addWidget(self.plotTools)
            self.imageLayout.addWidget(self.canvas)
        else:
            raise ValueError("Unknown type")

        # set headers for fits header tab
        self.tableFitsHeader.setColumnCount(3)
        self.tableFitsHeader.setHorizontalHeaderLabels(
            ["Key", "Value", "Comment"])

        # connect signals
        self.signal_update_gui.connect(self.update_gui)
        self.checkAutoSave.stateChanged.connect(
            lambda x: self.textAutoSavePath.setEnabled(x))
예제 #3
0
    def __init__(self, parent):

        self.canvas = parent.central_widget.canvas

        # Set up virtual Matplotlib navigation toolbar (don't show it)
        self._mpl_nav = NavigationToolbar2QT(self.canvas, parent)
        self._mpl_nav.hide()

        BasicToolbar.__init__(self, parent)
예제 #4
0
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.canvas = MplCanvas()
        self.toolbar = NavigationToolbar2QT(self.canvas, self)

        self.vbl = QtWidgets.QVBoxLayout()
        self.vbl.addWidget(self.canvas)
        self.vbl.addWidget(self.toolbar)
        self.setLayout(self.vbl)

        self.canvas.fig.canvas.mpl_connect('button_press_event', self.onclick)
예제 #5
0
파일: plot.py 프로젝트: vn-ki/solar-viewer
 def initMainCanvas(self):
     self.figure = plt.figure()
     self.canvas = FigureCanvas(self.figure)
     self.toolbar = NavigationToolbar2QT(self.canvas, self)
     self.toolbar.setVisible(False)
     FigureCanvas.setSizePolicy(self.canvas,
                                QtWidgets.QSizePolicy.Expanding,
                                QtWidgets.QSizePolicy.Expanding)
     FigureCanvas.updateGeometry(self.canvas)
     self.canvas.hide()
     self.ui.verticalLayout.addWidget(self.canvas)
예제 #6
0
    def __init__(self, viewer):

        self.canvas = viewer.central_widget.canvas

        # Set up virtual Matplotlib navigation toolbar (don't show it)
        self._mpl_nav = NavigationToolbar2QT(self.canvas, viewer)
        self._mpl_nav.hide()

        BasicToolbar.__init__(self, viewer)

        viewer.window_closed.connect(self.close)
예제 #7
0
    def getGraph(self):
        matplotlib.use('Qt5Agg')

        sc = MplCanvas(self, width=5, height=5, dpi=100)

        sc.axes.plot(list(self.data.keys()), list(self.data.values()))
        sc.axes.set_xlabel(self.algorithm.value_name.capitalize() +
                           ' (numpy.' + self.algorithm.algorithm + ')')
        sc.axes.set_ylabel('Test results')
        sc.axes.set_title(self.name + ' | ' + self.test_time)
        toolbar = NavigationToolbar2QT(sc, self)
        sc.fig.tight_layout()
        return toolbar, sc
예제 #8
0
    def show_result_img(self, signal):
        # 移除旧的画布
        try:
            self.imageshow.removeWidget(self.plot_figure)
            self.imageshow.removeWidget(self.tool)
        except:
            self.imageshow.removeWidget(self.photoview)
        finally:
            pass

        self.t1_t5()
        if signal == 0:
            self.rawimg.setDisabled(True)
        elif signal == 1:
            self.t1.setDisabled(True)
        elif signal == 2:
            self.t2.setDisabled(True)
        elif signal == 3:
            self.t3.setDisabled(True)
        elif signal == 4:
            self.t4.setDisabled(True)

        else:
            self.t5.setDisabled(True)

        self.plot_figure = ImageView(width=8, height=8, dpi=110)
        self.tool = NavigationToolbar2QT(self.plot_figure, self)

        image = plt.imread(BASE + "/data/" + str(signal) + ".png")
        self.id.setText("631d342a4")
        self.length.setText(str(image.shape[1]))
        self.width.setText(str(image.shape[0]))

        plt.imshow(image)

        self.imageshow.addWidget(self.plot_figure)
        self.imageshow.addWidget(self.tool)
        # 显示大标题
        name_list = [
            "any",
            "epidural",
            "intraparenchymal",
            "intraventricular",
            "subarachnoid",
            "subdural",
        ]
        if signal == 1:
            title = f"{name_list[signal]} - NO"
        else:
            title = f"{name_list[signal]} - YES"
        self.plot_figure.fig.suptitle(title)
예제 #9
0
    def initMainCanvas(self):
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar2QT(self.canvas, self)
        FigureCanvas.setSizePolicy(self.canvas,
                                   QtWidgets.QSizePolicy.Expanding,
                                   QtWidgets.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self.canvas)

        self.axes = self.figure.subplots(2, 1, sharex=True)
        self.figure.subplots_adjust(hspace=0)

        self.v_layout.addWidget(self.canvas)
        self.v_layout.addWidget(self.toolbar)
예제 #10
0
    def initMainCanvas(self):
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar2QT(self.canvas, self)
        self.toolbar.hide()

        FigureCanvas.setSizePolicy(self.canvas,
                                   QtWidgets.QSizePolicy.Expanding,
                                   QtWidgets.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self.canvas)

        self.axs = self.figure.subplots(2, 1)

        self.v_layout.addWidget(self.canvas)
예제 #11
0
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QtXRD')
        self.setWindowIcon(QIcon('assets/bird.png'))
        self.statusBar()
        self.createActions()
        self.mainView = MainView(self)
        self.settings = XrdSetting()
        self.setCentralWidget(self.mainView)
        self.createMenuBar()
        self.addToolBar(Qt.TopToolBarArea,
                        NavigationToolbar2QT(self.mainView.figure_view, self))

        self.resize(1500, 800)
예제 #12
0
    def __init__(self, canvas, num):
        super().__init__(canvas, num)
        self.mw = FreeCADGui.getMainWindow()
        self.mdi = self.mw.findChild(QtWidgets.QMdiArea)
        self.widget = PlotWidget(self)
        self.widget.setLayout(QtWidgets.QHBoxLayout())
        self.mdi.addSubWindow(self.widget)
        self.widget.layout().addWidget(self.canvas)
        self.widget.show()

        FigureManager.all_widgets.append(self.widget)

        self.toolbar = NavigationToolbar2QT(self.canvas, self.widget, False)
        self.toolbar.setOrientation(QtCore.Qt.Vertical)
        self.widget.layout().addWidget(self.toolbar)
        self.canvas.set_widget_name = self.set_widget_name
예제 #13
0
    def _create_canvas(self, parent):
        """ Create the MPL canvas. """
        # matplotlib commands to create a canvas
        frame = QtGui.QWidget()
        mpl_canvas = FigureCanvas(self.value)
        mpl_canvas.setParent(frame)

        vbox = QtGui.QVBoxLayout()

        if self.toolbar:
            mpl_toolbar = NavigationToolbar2QT(mpl_canvas, frame)
            vbox.addWidget(mpl_toolbar)

        vbox.addWidget(mpl_canvas)
        frame.setLayout(vbox)

        return frame
예제 #14
0
    def start_analysis(self):
        # 移除旧的画布
        try:
            self.imageshow.removeWidget(self.plot_figure)
            self.imageshow.removeWidget(self.tool)
        except:
            self.imageshow.removeWidget(self.photoview)
        finally:
            pass

        filename = self.imgfile.currentText()
        filepath = os.path.join(self.fold, filename)
        self.filepath = filepath
        self.plot_figure = ImageView(width=8, height=8, dpi=110)
        self.tool = NavigationToolbar2QT(self.plot_figure, self)
        if filepath[-3:] == "dcm":
            # 读取dicom文件
            _slice = pydicom.read_file(filepath)

            # 设置id, 长, 宽
            self.id.setText(_slice.PatientID)
            self.length.setText(str(_slice.pixel_array.shape[1]))
            self.width.setText(str(_slice.pixel_array.shape[0]))

            # 获取dicom数据,绘图
            image = np.stack(_slice.pixel_array)
            image = image.astype(np.int16)
            image = np.array(image)
        else:
            image = plt.imread(filepath)
            self.id.setText(" ")
            self.length.setText(str(image.shape[1]))
            self.width.setText(str(image.shape[0]))

        plt.imshow(image, cmap=plt.cm.gray)

        self.imageshow.addWidget(self.plot_figure)
        self.imageshow.addWidget(self.tool)
        _img = filepath.split("/")[-1]
        # 显示大标题
        self.plot_figure.fig.suptitle(_img)
        self.console.append(f"Start Precessing image:{_img}")
        self.t1_t5()
예제 #15
0
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Moulder")
        self.setWindowIcon(QIcon.fromTheme('python-logo'))
        self.setGeometry(200, 200, 1024, 700)
        self.init_ui()

        widget = QWidget()
        layout = QVBoxLayout()
        self.moulder = Moulder(self, numpy.linspace(0, 100e3, 101),
                               numpy.zeros(101), 0, 10000,
                               density_range=DENSITY_RANGE,
                               width=5, height=4, dpi=100)
        self.moulder.setFocusPolicy(Qt.StrongFocus)
        self.navigation_bar = NavigationToolbar2QT(self.moulder, widget)
        layout.addWidget(self.moulder)
        layout.addWidget(self.navigation_bar)
        widget.setLayout(layout)
        self.setCentralWidget(widget)
        self.set_callbacks()
예제 #16
0
파일: main.py 프로젝트: rwahog/DEAssignment
    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)

        self.tabs = QTabWidget()
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()

        self.tabs.addTab(self.tab1, "Numerical Methods")
        self.tabs.addTab(self.tab2, "Local Error")
        self.tabs.addTab(self.tab3, "Global Error")

        self.tab1.layout = QVBoxLayout()
        self.graph = PlotCanvas(self)
        self.toolbar = NavigationToolbar2QT(self.graph, self)
        self.tab1.layout.addWidget(self.toolbar)
        self.tab1.layout.addWidget(self.graph)
        self.tab1.setLayout(self.tab1.layout)

        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)
예제 #17
0
    def waveform_splicing_btn_func(self):
        aData = int(self.a_wave_starting_point.text())
        bData = int(self.b_wave_starting_point.text())
        self.chart_a, self.chart_b = self.plant.cheak_ab(a=aData, b=bData)
        ss = self.plant.merge_ab(a=aData, b=bData)
        basline = self.plant.baseline(ss)
        self.plant.save_ab(self.new_file_name_edit.text(), basline)

        self.chartWidget = QWidget()
        self.chartLayout = QVBoxLayout(self.chartWidget)
        self.chartCanvas = MyFigureCanvas()
        self.chartNavigationToolbar = NavigationToolbar2QT(self.chartCanvas, self.chartWidget)
        self.chartLayout.addWidget(self.chartNavigationToolbar)
        self.chartLayout.addWidget(self.chartCanvas)

        ax1 = self.chartCanvas.figure.add_subplot(211)
        self.chart_a.plot(ax=ax1)

        ax2 = self.chartCanvas.figure.add_subplot(212)
        self.chart_b.plot(ax=ax2)

        self.chartWidget.show()
예제 #18
0
    def __init__(self, parentRoiPlot: RoiPlot, parent: QWidget = None):
        super().__init__(parent=parent)
        self.setWindowFlags(QtCore.Qt.Window
                            | QtCore.Qt.WindowMinMaxButtonsHint)
        # self.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.WindowTitleHint | QtCore.Qt.CustomizeWindowHint)  # Get rid of the close button. this is handled by the selector widget active status
        self.setWindowTitle("Sin City Image Export")
        self.setModal(False)

        self.parentRoiPlot = parentRoiPlot
        self.cachedImage = None

        self.fig, self.ax = matplotlib.pyplot.subplots()
        c = FigureCanvasQTAgg(self.fig)
        self.plotWidg = QWidget(self)
        self.plotWidg.setLayout(QVBoxLayout())
        self.plotWidg.layout().addWidget(c)
        self.plotWidg.layout().addWidget(NavigationToolbar2QT(c, self))

        self.ax.xaxis.set_visible(False)
        self.ax.yaxis.set_visible(False)
        self.im = self.ax.imshow(self.parentRoiPlot.getImageData())

        self._paintDebounce = QtCore.QTimer(
        )  # This timer prevents the selectionChanged signal from firing too rapidly.
        self._paintDebounce.setInterval(200)
        self._paintDebounce.setSingleShot(True)
        self._paintDebounce.timeout.connect(self.paint)

        self.vmin = QDoubleSpinBox(self)
        self.vmin.setValue(0)
        self.vmin.setDecimals(3)
        self.vmin.setMaximum(10000)
        self.vmin.setSingleStep(0.001)

        def vminChanged(val):
            self.stale = True
            self._paintDebounce.start()

        self.vmin.valueChanged.connect(vminChanged)

        self.vmax = QDoubleSpinBox(self)
        self.vmax.setValue(.1)
        self.vmax.setDecimals(3)
        self.vmax.setMaximum(10000)
        self.vmax.setSingleStep(0.001)

        def vmaxChanged(val):
            self.stale = True
            self._paintDebounce.start()

        self.vmax.valueChanged.connect(vmaxChanged)

        self.scaleBg = QDoubleSpinBox(self)
        self.scaleBg.setValue(.33)
        self.scaleBg.setMinimum(0)
        self.scaleBg.setDecimals(2)
        self.scaleBg.setMaximum(3)
        self.scaleBg.setSingleStep(0.01)

        def scaleBgChanged(val):
            self.stale = True
            self._paintDebounce.start()

        self.scaleBg.valueChanged.connect(scaleBgChanged)

        self.hue = QDoubleSpinBox(self)
        self.hue.setMinimum(0)
        self.hue.setMaximum(1)
        self.hue.setValue(0)
        self.hue.setSingleStep(0.05)

        def hueRangeChanged(val):
            self.stale = True
            self._paintDebounce.start()

        self.hue.valueChanged.connect(hueRangeChanged)

        self.exp = QDoubleSpinBox(self)
        self.exp.setMinimum(0.5)
        self.exp.setMaximum(3)
        self.exp.setValue(1)
        self.exp.setSingleStep(0.05)

        def expRangeChanged(val):
            self.stale = True
            self._paintDebounce.start()

        self.exp.valueChanged.connect(expRangeChanged)

        self.scaleBar = QSpinBox(self)
        self.scaleBar.setValue(0)
        self.scaleBar.setMaximum(10000)

        def scaleBarChanged(val):
            self.stale = True
            self._paintDebounce.start()

        self.scaleBar.valueChanged.connect(scaleBarChanged)

        self.refreshButton = QPushButton("Refresh", self)

        def refreshAction():
            self.stale = True  # Force a full refresh
            self.paint()

        self.refreshButton.released.connect(refreshAction)

        l = QGridLayout()
        l.addWidget(QLabel("Minimum Value", self), 0, 0)
        l.addWidget(self.vmin, 0, 1)
        l.addWidget(QLabel("Maximum Value", self), 1, 0)
        l.addWidget(self.vmax, 1, 1)
        l.addWidget(QLabel("Scale Background", self), 2, 0)
        l.addWidget(self.scaleBg, 2, 1)
        l.addWidget(QLabel("Hue", self), 3, 0)
        l.addWidget(self.hue, 3, 1)
        l.addWidget(QLabel("Exponent", self), 4, 0)
        l.addWidget(self.exp, 4, 1)
        l.addWidget(QLabel("Scale Bar", self), 5, 0)
        l.addWidget(self.scaleBar, 5, 1)
        l.addWidget(self.refreshButton, 6, 0)
        layout = QHBoxLayout()
        layout.addLayout(l)
        layout.addWidget(self.plotWidg)
        self.setLayout(layout)

        self.stale = True
        self.paint()
예제 #19
0
 def init_navi_toolbar(self):
     self.navi_toolbar = NavigationToolbar2QT(self.canvas, self)
     self.navi_toolbar.setStyleSheet('border: none')
     self.navi_toolbar.setMaximumHeight(20)
예제 #20
0
파일: toolbar.py 프로젝트: nQuant/glue
def _ensure_mpl_nav(viewer):
    # Set up virtual Matplotlib navigation toolbar (don't show it)
    if not hasattr(viewer, '_mpl_nav'):
        viewer._mpl_nav = NavigationToolbar2QT(viewer.central_widget.canvas,
                                               viewer)
        viewer._mpl_nav.hide()
예제 #21
0
    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.manual_insert.move(500, 60)
        self.manual_insert.resize(140, 85)

        self.manual_insert_x_label.setText('x:')
        self.manual_insert_x_label.move(10, 20)

        self.manual_insert_x.placeholderText = 'Podaj wartość x'
        self.manual_insert_x.setToolTip(
            'Punkt, który dodasz będzie miał następującą współrzędną y')
        self.manual_insert_x.move(20, 20)
        self.manual_insert_x.resize(100, 16)

        self.manual_insert_y_label = QLabel(self.manual_insert)
        self.manual_insert_y_label.setText('y:')
        self.manual_insert_y_label.move(10, 40)

        self.manual_insert_y.placeholderText = 'Podaj wartość y'
        self.manual_insert_y.setToolTip(
            'Punkt, który dodasz będzie miał następującą współrzędną y')
        self.manual_insert_y.move(20, 40)
        self.manual_insert_y.resize(100, 16)

        self.manual_insert_button.setText('Dodaj punkt')
        self.manual_insert_button.move(40, 60)
        self.manual_insert_button.resize(81, 24)

        self.manual_insert_button.clicked.connect(self.min_button_clicked)
        self.refresh_plot()

        self.addToolBar(NavigationToolbar2QT(self.plot, self))

        self.interp_box1.move(500, 145)
        self.interp_box1.resize(140, 50)
        self.interp_combo1.addItems([
            'Brak', 'Liniowa', 'Kwadratowa', 'Wielomianowa (10)',
            'Wielomianowa', 'Logarytmiczna', 'Wykładnicza'
        ])
        self.interp_combo1.move(10, 20)
        self.interp_combo1.resize(120, 20)
        self.interp_combo1.activated[int].connect(self.interp_combo_activated1)

        self.interp_box2.move(500, 195)
        self.interp_box2.resize(140, 50)
        self.interp_combo2.addItems([
            'Brak', 'Liniowa', 'Kwadratowa', 'Wielomianowa (10)',
            'Wielomianowa', 'Logarytmiczna', 'Wykładnicza'
        ])
        self.interp_combo2.move(10, 20)
        self.interp_combo2.resize(120, 20)
        self.interp_combo2.activated[int].connect(self.interp_combo_activated2)

        self.select_point_box.move(500, 245)
        self.select_point_box.resize(140, 50)
        self.select_point_combo.move(10, 20)
        self.select_point_combo.resize(120, 20)
        self.select_point_combo.activated[int].connect(
            self.select_point_combo_activated)

        self.grid_on.move(515, 291)
        self.grid_on.setChecked(False)
        self.grid_on.stateChanged.connect(self.grid_on_changed)

        self.grid_label.move(533, 290)

        self.show()
예제 #22
0
    def show_fig(self):
        if self.fold is None:
            self.console.append('[ERROR] You haven\'t opened an image!')
            return
        self.start_btn_hit = False
        try:
            self.resultlayer.removeWidget(self.result_figure)
        except:
            self.resultlayer.removeWidget(self.resultview)
        # 移除旧的画布
        try:
            self.imageshow.removeWidget(self.plot_figure)
            self.imageshow.removeWidget(self.tool)
        except:
            self.imageshow.removeWidget(self.photoview)
        # finally:
        #     pass

        filename = self.imgfile.currentText()
        filepath = os.path.join(self.fold, filename)
        self.console.append(f"[INFO] Showing:{filename}")

        self.filepath = filepath

        plt.close('all')

        self.plot_figure = ImageView(width=8, height=8, dpi=110)
        self.tool = NavigationToolbar2QT(self.plot_figure, self)
        if filepath[-3:] == "dcm":
            # 读取dicom文件
            _slice = preprocess(filepath)

            # 设置id, 长, 宽
            self.id.setText(_slice.PatientID)
            self.length.setText(str(_slice.pixel_array.shape[1]))
            self.width.setText(str(_slice.pixel_array.shape[0]))
            self.image = _slice
        else:
            self.image = plt.imread(filepath)
            # if self.image.ndim == 3:
            #     self.image = rgb_to_grey(self.image)
            # self.id.setText(" ")
            self.length.setText(str(self.image.shape[1]))
            self.width.setText(str(self.image.shape[0]))
        self.id.setText(str(self.image.shape))

        # while len(self.image) == 1:
        #     self.image = self.image[0]
        self.imageshow.addWidget(self.plot_figure)
        self.imageshow.addWidget(self.tool)
        _img = filepath.split(path_sign)[-1]
        if len(self.image.shape) == 3:
            plt.imshow(self.image)
        else:
            plt.imshow(self.image, plt.gray())

        # plt.imshow(np.around(torch.clamp(jet(image.expand(1,3,-1,-1)), 0, 1)[0,0].cpu().numpy()*255).astype(np.uint8))

        # 显示大标题
        self.plot_figure.fig.suptitle(_img)
        self.t1_t5()
예제 #23
0
    def show_gradcam(self, signal):
        if not self.start_btn_hit:
            self.console.append('[ERROR] Please Diagnose the image first')
            return

        plt.close('all')

        if self.image is None:
            self.console.append('[WARNING] Image is not selected')
            return

        # 移除旧的画布
        try:
            self.imageshow.removeWidget(self.plot_figure)
            self.imageshow.removeWidget(self.tool)
        except:
            self.imageshow.removeWidget(self.photoview)
        finally:
            pass

        self.t1_t5()
        if signal == 0:
            self.rawimg.setDisabled(True)
        elif signal == 1:
            self.t1.setDisabled(True)
        elif signal == 2:
            self.t2.setDisabled(True)
        elif signal == 3:
            self.t3.setDisabled(True)
        elif signal == 4:
            self.t4.setDisabled(True)
        elif signal == 5:
            self.t5.setDisabled(True)
        else:
            raise Exception('Incorrect Signal Tossed!')

        self.plot_figure = ImageView(width=8, height=8, dpi=110)
        self.tool = NavigationToolbar2QT(self.plot_figure, self)

        selected_index = self.models.currentIndex()
        selected_model = Models[selected_index]
        if not selected_model.loaded:
            selected_model.load_state_dict(
                torch.load(MODEL_PATH[selected_index]))
            selected_model.loaded = True
            selected_model.eval()
        image = self.image
        if isinstance(image, np.ndarray):
            image = torch.tensor(image)

        if len(image.shape) == 3:
            self.console.append(
                '[WARNING] For Heatmap, please use GradCAM Diagnose for optimal result'
            )
            image = rgb_to_grey(image)

        image = (image - 0.188) / 0.315
        image = image.expand(1, 3, -1, -1)
        ind = torch.tensor([[signal]])

        grad_cam = GradCAM(model=selected_model)
        cam = grad_cam(image.expand(1, 3, -1, -1), ind)
        cam = jet(cam)

        image = torch.clamp(image * ct_std + ct_mean, 0, 1) + cam
        image = np.moveaxis(image[0].cpu().numpy(), 0, 2)
        image = image / image.max()
        image = np.around(image * 255).astype(np.uint8)
        # if image.shape[0] == 3:
        #     image = image[0]
        plt.imshow(image)

        self.imageshow.addWidget(self.plot_figure)
        self.imageshow.addWidget(self.tool)
        # 显示大标题
        name_list = [
            "Any", "Epidural", "Intraparenchymal", "Intraventricular",
            "Subarachnoid", "Subdural"
        ]
        if self.flag[signal] == 'green':
            title = f"{name_list[signal]} - Not Diagnosed"
        else:
            title = f"{name_list[signal]} - Diagnosed"
        self.plot_figure.fig.suptitle(title)