# -*- coding: utf-8 -*- """The chart dialog of dimensional synthesis result.""" __author__ = "Yuan Chang" __copyright__ = "Copyright (C) 2016-2020" __license__ = "AGPL" __email__ = "pyslvs@gmail.com" from typing import Sequence, Mapping, Any from numpy import array from qtpy.QtCore import Qt, QSize from qtpy.QtWidgets import QDialog, QVBoxLayout, QTabWidget, QWidget from pyslvs_ui.graphics import DataChart class ChartDialog(QDialog): """There are three charts are in the dialog. + Fitness / Generation Chart. + Generation / Time Chart. + Fitness / Time Chart. """ def __init__( self, title: str, algorithm_data: Sequence[Mapping[str, Any]], parent: QWidget ): """Add three tabs of chart.""" super(ChartDialog, self).__init__(parent) self.setWindowTitle("Chart") self.setWindowFlags(self.windowFlags() | Qt.WindowMaximizeButtonHint) self.setSizeGripEnabled(True) self.setModal(True) self.setMinimumSize(QSize(800, 600)) self.title = title self.algorithm_data = algorithm_data # Widgets main_layout = QVBoxLayout(self) main_layout.setContentsMargins(6, 6, 6, 6) self.tab_widget = QTabWidget(self) self.__set_chart("F-G Plot", 0, 1, 'Generation', 'Fitness') self.__set_chart("G-T Plot", 2, 0, 'Time', 'Generation') self.__set_chart("F-T Plot", 2, 1, 'Time', 'Fitness') main_layout.addWidget(self.tab_widget) def __set_chart( self, name: str, pos_x: int, pos_y: int, label_x: str, label_y: str ) -> None: """Setting charts by data index. pos_x / pos_y: [0], [1], [2] time_fitness: List[List[Tuple[gen, fitness, time]]] """ chart = DataChart(self) ax = chart.ax() for i, data in enumerate(self.algorithm_data): a = array(data['time_fitness'], dtype=float) ax[0].plot(a[:, pos_x], a[:, pos_y], label=f"Task {i + 1}") ax[0].set_xlabel(label_x) ax[0].set_ylabel(label_y) ax[0].legend() self.tab_widget.addTab(chart, name)