dylab/HelperClasses/Plotting/Quick1DPlot.py

128 lines
4.7 KiB
Python
Raw Normal View History

2022-07-30 21:50:53 +02:00
class Quick1DPlot(QuickDataPlot):
def __init__(self, ap, **kwargs):
super().__init__(ap, **kwargs)
self.nplots = 0
self.table.setColumnCount(5)
self.table.setRowCount(1)
self.table.setColumnWidth(0, 200)
self.table.setColumnWidth(1, 200)
self.table.setColumnWidth(2, 30)
self.table.setColumnWidth(3, 30)
self.table.setColumnWidth(4, 40)
self.table.setHorizontalHeaderLabels(['xvalue', 'yvalue', 'color', 'show', 'scatter'])
self.combos = []
self.curves = []
self.show_cbs = []
self.scatter_cbs = []
self.mk_buttons()
def mk_buttons(self):
self.bt_add_plot = QPushButton('Add plot', self)
self.bt_add_plot.clicked.connect(self.add_plot)
self.table.setCellWidget(self.nplots, 0, self.bt_add_plot)
self.bt_update = QPushButton('Update', self)
self.bt_update.clicked.connect(self.update_from_h5)
self.table.setCellWidget(self.nplots, 1, self.bt_update)
def add_plot(self):
self.nplots += 1
self.table.setRowCount(self.nplots + 1)
combox = NumericDataCombo(self.ap.df)
comboy = NumericDataCombo(self.ap.df)
self.combos += [[combox, comboy]]
self.table.setCellWidget(self.nplots - 1, 0, combox)
self.table.setCellWidget(self.nplots - 1, 1, comboy)
self.table.setItem(self.nplots - 1, 2, QtGui.QTableWidgetItem())
self.table.item(self.nplots - 1, 2).setBackground(QtGui.QColor(*color_palette[self.nplots - 1]))
# self.table.setFixedSize(self.table.sizeHint())
self.curves += [
self.plot.plot(pen=pg.mkPen(color=color_palette[self.nplots - 1], width=1.5), symbol='x', symbolPen=None,
symbolBrush=None)]
self.show_cbs += [QCheckBox()]
self.show_cbs[self.nplots - 1].setChecked(True)
self.table.setCellWidget(self.nplots - 1, 3, self.show_cbs[self.nplots - 1])
self.show_cbs[self.nplots - 1].stateChanged.connect(self.update_shows)
self.scatter_cbs += [QCheckBox()]
self.scatter_cbs[self.nplots - 1].setChecked(False)
self.table.setCellWidget(self.nplots - 1, 4, self.scatter_cbs[self.nplots - 1])
self.scatter_cbs[self.nplots - 1].stateChanged.connect(self.update_scatters)
self.mk_buttons()
def update_shows(self):
for k, cb in enumerate(self.show_cbs):
if cb.isChecked():
self.curves[k].show()
else:
self.curves[k].hide()
def update_scatters(self):
for k, cb in enumerate(self.scatter_cbs):
pen = pg.mkPen(color=color_palette[k], width=1.5)
brush = pg.mkBrush(color=color_palette[k])
if cb.isChecked():
self.curves[k].setSymbolBrush(brush)
self.curves[k].setPen(None)
else:
self.curves[k].setSymbolBrush(None)
self.curves[k].setPen(pen)
def update_data_extractor(self):
idxxs = [combo[0].get_idx() for combo in self.combos]
idxys = [combo[1].get_idx() for combo in self.combos]
for idxx in idxxs:
if idxx not in self.data_extractor.data_extractors:
if idxx[0] == 'shot number':
self.data_extractor[idxx] = EmptyDataExtractor()
else:
self.data_extractor[idxx] = SingleDataExtractor(idxx)
for idxy in idxys:
if idxy not in self.data_extractor.data_extractors:
if idxy[0] == 'shot number':
self.data_extractor[idxy] = EmptyDataExtractor()
else:
self.data_extractor[idxy] = SingleDataExtractor(idxy)
self.data_extractor.clean_children(idxxs + idxys)
self.data_extractor.clean_memory(self.ap.h5_paths)
def update(self, data=None):
Xs = np.zeros((self.nplots, len(self.ap.h5_paths_selected)))
Ys = np.zeros((self.nplots, len(self.ap.h5_paths_selected)))
for i, h5_path in enumerate(self.ap.h5_paths_selected):
data = self.data_extractor.get_data(h5_path)[0]
for k in range(self.nplots):
idxx = self.combos[k][0].get_idx()
idxy = self.combos[k][1].get_idx()
if idxx[0] == 'shot number':
Xs[k, i] = self.ap.shotselector.get_selected_indices()[0][i]
else:
Xs[k, i] = data[idxx]
if idxy[0] == 'shot number':
Ys[k, i] = self.ap.shotselector.get_selected_indices()[0][i]
else:
Ys[k, i] = data[idxy]
for k in range(self.nplots):
self.curves[k].setData(Xs[k], Ys[k])