def __init__(self): QWidget.__init__(self) self.model = CustomTableModel() self.table_view = QTableView() self.table_view.setModel(self.model) self.table_view.horizontalHeader().setSectionResizeMode( QHeaderView.Stretch) self.table_view.verticalHeader().setSectionResizeMode( QHeaderView.Stretch) self.chart = QtCharts.QChart() self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) self.series = QtCharts.QLineSeries() self.series.setName("Line 1") self.mapper = QtCharts.QVXYModelMapper(self) self.mapper.setXColumn(0) self.mapper.setYColumn(1) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) self.chart.addSeries(self.series) # for storing color hex from the series seriesColorHex = "#000000" # get the color of the series and use it for showing the mapped area seriesColorHex = "{}".format(self.series.pen().color().name()) self.model.add_mapping(seriesColorHex, QRect(0, 0, 2, self.model.rowCount())) # series 2 self.series = QtCharts.QLineSeries() self.series.setName("Line 2") self.mapper = QtCharts.QVXYModelMapper(self) self.mapper.setXColumn(2) self.mapper.setYColumn(3) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) self.chart.addSeries(self.series) # get the color of the series and use it for showing the mapped area seriesColorHex = "{}".format(self.series.pen().color().name()) self.model.add_mapping(seriesColorHex, QRect(2, 0, 2, self.model.rowCount())) self.chart.createDefaultAxes() self.chart_view = QtCharts.QChartView(self.chart) self.chart_view.setRenderHint(QPainter.Antialiasing) self.chart_view.setMinimumSize(640, 480) # create main layout self.main_layout = QGridLayout() self.main_layout.addWidget(self.table_view, 1, 0) self.main_layout.addWidget(self.chart_view, 1, 1) self.main_layout.setColumnStretch(1, 1) self.main_layout.setColumnStretch(0, 0) self.setLayout(self.main_layout)
def add_series(self, name, columns): self.series = QtCharts.QLineSeries() self.series.setName(name) self.mapper = QtCharts.QVXYModelMapper(self) self.mapper.setXColumn(columns[0]) self.mapper.setYColumn(columns[1]) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) self.chart.addSeries(self.series)
def add_series(self, name, columns): self.series = QtCharts.QLineSeries() self.series.setName(name) self.mapper = QtCharts.QVXYModelMapper(self) self.mapper.setXColumn(columns[0]) self.mapper.setYColumn(columns[1]) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) self.chart.addSeries(self.series) # for storing color hex from the series seriesColorHex = "#000000" # get the color of the series and use it for showing the mapped area seriesColorHex = "{}".format(self.series.pen().color().name()) self.model.add_mapping(seriesColorHex, QRect(columns[0], 0, 2, self.model.rowCount()))
def __init__(self, chart): QObject.__init__(self) self.module_path = os.path.dirname(__file__) self.pca_matrix = np.array([]) self.labels = [] self.chart = chart self.model = Model() self.model_selection = Model() self.callout = Callout(self.chart) self.callout.hide() loader = QUiLoader() self.main_widget = loader.load(self.module_path + "/ui/table.ui") self.table_view = self.main_widget.findChild(QTableView, "table_view") table_cfg_frame = self.main_widget.findChild(QFrame, "table_cfg_frame") pc_frame = self.main_widget.findChild(QFrame, "pc_frame") button_load_data = self.main_widget.findChild(QPushButton, "button_load_data") self.pc1_variance_ratio = self.main_widget.findChild( QLabel, "pc1_variance_ratio") self.pc1_singular_value = self.main_widget.findChild( QLabel, "pc1_singular_value") self.pc2_variance_ratio = self.main_widget.findChild( QLabel, "pc2_variance_ratio") self.pc2_singular_value = self.main_widget.findChild( QLabel, "pc2_singular_value") self.legend = self.main_widget.findChild(QLineEdit, "legend_name") self.groupbox_axis = self.main_widget.findChild( QGroupBox, "groupbox_axis") self.groupbox_norm = self.main_widget.findChild( QGroupBox, "groupbox_norm") self.preprocessing_none = self.main_widget.findChild( QRadioButton, "radio_none") self.preprocessing_normalize = self.main_widget.findChild( QRadioButton, "radio_normalize") self.preprocessing_standardize = self.main_widget.findChild( QRadioButton, "radio_standardize") self.preprocessing_axis_features = self.main_widget.findChild( QRadioButton, "radio_axis_features") self.preprocessing_axis_samples = self.main_widget.findChild( QRadioButton, "radio_axis_samples") self.preprocessing_norm_l1 = self.main_widget.findChild( QRadioButton, "radio_norm_l1") self.preprocessing_norm_l2 = self.main_widget.findChild( QRadioButton, "radio_norm_l2") self.preprocessing_norm_max = self.main_widget.findChild( QRadioButton, "radio_norm_max") self.progressbar = self.main_widget.findChild(QProgressBar, "progressbar") self.progressbar.hide() self.table_view.horizontalHeader().setSectionResizeMode( QHeaderView.ResizeToContents) self.table_view.verticalHeader().setSectionResizeMode( QHeaderView.ResizeToContents) self.table_view.setModel(self.model) # chart series self.series = QtCharts.QScatterSeries(self.table_view) self.series.setName("table") self.series.setMarkerSize(15) self.series.hovered.connect(self.on_hover) self.chart.addSeries(self.series) self.mapper = QtCharts.QVXYModelMapper() self.mapper.setXColumn(1) self.mapper.setYColumn(2) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) # selection series self.series_selection = QtCharts.QScatterSeries(self.table_view) self.series_selection.setName("selection") self.series_selection.setMarkerShape( QtCharts.QScatterSeries.MarkerShapeRectangle) self.series_selection.setMarkerSize(15) self.series_selection.hovered.connect(self.on_hover) self.chart.addSeries(self.series_selection) self.mapper_selection = QtCharts.QVXYModelMapper() self.mapper_selection.setXColumn(1) self.mapper_selection.setYColumn(2) self.mapper_selection.setSeries(self.series_selection) self.mapper_selection.setModel(self.model_selection) # effects button_load_data.setGraphicsEffect(self.button_shadow()) table_cfg_frame.setGraphicsEffect(self.card_shadow()) pc_frame.setGraphicsEffect(self.card_shadow()) # signals button_load_data.clicked.connect(self.open_file) self.table_view.selectionModel().selectionChanged.connect( self.selection_changed) self.legend.returnPressed.connect(self.update_legend) self.preprocessing_none.toggled.connect(self.on_preprocessing_changed) self.preprocessing_normalize.toggled.connect( self.on_preprocessing_changed) self.preprocessing_standardize.toggled.connect( self.on_preprocessing_changed) self.preprocessing_axis_features.toggled.connect( self.on_preprocessing_axis_changed) self.preprocessing_axis_samples.toggled.connect( self.on_preprocessing_axis_changed) self.preprocessing_norm_l1.toggled.connect( self.on_preprocessing_norm_changed) self.preprocessing_norm_l2.toggled.connect( self.on_preprocessing_norm_changed) self.preprocessing_norm_max.toggled.connect( self.on_preprocessing_norm_changed) # event filter self.table_view.installEventFilter(self)