import numpy as np
from PyQt5 import QtWidgets
from gui.ui.PlotSpectra import Ui_Form
from gui.util.Modules import Modules
from gui.util.plots import make_plot
from libpyhat.utils.utils import enumerate_duplicates
[docs]
class PlotSpectra(Ui_Form, Modules):
[docs]
def setupUi(self, Form):
super().setupUi(Form)
Modules.setupUi(self, Form)
[docs]
def set_xTitle(self):
try:
self.xtitle_lineEdit.setText(
self.xVariableListWidget.currentItem().text()
)
except:
pass
[docs]
def newfig_check(self):
if self.figname_comboBox.currentText() == 'New Figure':
self.newfig_checkBox.setChecked(True)
else:
self.newfig_checkBox.setChecked(False)
[docs]
def fig_options(self):
if self.newfig_checkBox.isChecked():
self.xminLabel.setHidden(False)
self.xminDoubleSpinBox.setHidden(False)
self.yminlabel.setHidden(False)
self.yminSpinBox.setHidden(False)
self.xtitle_label.setHidden(False)
self.xtitle_lineEdit.setHidden(False)
self.ymaxlabel.setHidden(False)
self.ymaxSpinBox.setHidden(False)
self.xmaxLabel.setHidden(False)
self.xmaxDoubleSpinBox.setHidden(False)
self.ytitle_label.setHidden(False)
self.ytitle_lineEdit.setHidden(False)
self.plotTitleLabel.setHidden(False)
self.plotTitleLineEdit.setHidden(False)
self.newfig_lineEdit.setHidden(False)
self.newfig_label.setHidden(False)
else:
self.xminLabel.setHidden(True)
self.xminDoubleSpinBox.setHidden(True)
self.yminlabel.setHidden(True)
self.yminSpinBox.setHidden(True)
self.xtitle_label.setHidden(True)
self.xtitle_lineEdit.setHidden(True)
self.ymaxlabel.setHidden(True)
self.ymaxSpinBox.setHidden(True)
self.xmaxLabel.setHidden(True)
self.xmaxDoubleSpinBox.setHidden(True)
self.ytitle_label.setHidden(True)
self.ytitle_lineEdit.setHidden(True)
self.plotTitleLabel.setHidden(True)
self.plotTitleLineEdit.setHidden(True)
self.newfig_lineEdit.setHidden(True)
self.newfig_label.setHidden(True)
[docs]
def run(self):
one_to_one = False
dpi = 1000
annot_mask = None
cmap = None
colortitle = ''
marker = None
loadfig = None
datakey = self.chooseDataComboBox.currentText()
try:
xcol = self.xVariableListWidget.selectedItems()[0].text()
except:
xcol = self.data[datakey].spect_label
col = self.chooseColumnComboBox.currentText()
try:
row = self.chooseRowsListWidget.selectedItems()[0].text()
except:
row = 'None Selected'
if self.figname_comboBox.currentText() == 'New Figure':
figname = self.newfig_lineEdit.text()
else:
figname = self.figname_comboBox.currentText()
if figname not in self.figname:
self.figname.append(figname)
if figname in self.figs:
loadfig = self.figs[figname]
title = self.plotTitleLineEdit.text()
xtitle = self.xtitle_lineEdit.text()
ytitle = self.ytitle_lineEdit.text()
figfile = self.plotFilenameLineEdit.text()
figpath, figfile = '/'.join(figfile.split('/')[:-1]), \
figfile.split('/')[-1]
color = self.colorComboBox.currentText()
alpha = self.alphaDoubleSpinBox.value() / 100.0
linewidth = self.lineWidthDoubleSpinBox.value()
if color == 'Red':
color = [1, 0, 0, alpha]
elif color == 'Green':
color = [0, 1, 0, alpha]
elif color == 'Blue':
color = [0, 0, 1, alpha]
elif color == 'Cyan':
color = [0, 1, 1, alpha]
elif color == 'Yellow':
color = [1, 1, 0, alpha]
elif color == 'Magenta':
color = [1, 0, 1, alpha]
elif color == 'Black':
color = [0, 0, 0, alpha]
else:
color = [0, 0, 0, alpha]
line = self.lineComboBox.currentText()
if line == 'Points (No Line)':
linestyle = 'None'
elif line == 'Line':
linestyle = '-'
elif line == 'Dashed Line':
linestyle = '--'
elif line == 'Dotted Line':
linestyle = ':'
else:
linestyle = '-'
xmin = self.xminDoubleSpinBox.value()
xmax = self.xmaxDoubleSpinBox.value()
xrange = [xmin, xmax]
ymin = self.yminSpinBox.value()
ymax = self.ymaxSpinBox.value()
yrange = [ymin, ymax]
self.data[datakey].enumerate_duplicates(col)
data = self.data[datakey].df
y = np.squeeze(
np.array(
data.loc[
data[(self.data[datakey].meta_label, col)].isin([row])][
xcol].T
)
)
x = np.array(data[xcol].columns.values)
if linestyle == 'None':
marker = 'o'
self.figs[figname] = make_plot(
x, y, figpath=figpath, figfile=figfile,
xrange=xrange, yrange=yrange,
xtitle=xtitle, ytitle=ytitle,
title=title, one_to_one=one_to_one,
dpi=dpi, color=color,
annot_mask=annot_mask, cmap=cmap,
colortitle=colortitle, loadfig=loadfig,
marker=marker, linestyle=linestyle,
linewidth=linewidth, lbl=row
)
[docs]
def xvar_choices(self):
try:
try:
xvarchoices = self.data[
self.chooseDataComboBox.currentText()].df.columns.levels[
0].values
except:
xvarchoices = self.data[
self.chooseDataComboBox.currentText()].columns.values
xvarchoices = [i for i in xvarchoices if
'Unnamed' not in i] # remove unnamed columns
# from choices
except:
xvarchoices = ['No valid choices!']
return xvarchoices
[docs]
def plot_spect_change_vars(self, obj):
obj.clear()
try:
data = self.data[self.chooseDataComboBox.currentText()]
vars_level0 = data.df.columns.get_level_values(0)
vars_level1 = data.df.columns.get_level_values(1)
vars_level1 = vars_level1[vars_level0 == data.meta_label]
try:
vars_level1 = [i for i in vars_level1 if
'Unnamed' not in str(
i
)] # remove unnamed columns from choices
except:
pass
choices = vars_level1
except:
try:
choices = self.data[
self.chooseDataComboBox.currentText()].columns.values
except:
choices = ['No valid choices']
for i in choices:
obj.addItem(str(i))
[docs]
def plot_spect_update_list(self, obj):
try:
obj.clear()
data = self.data[self.chooseDataComboBox.currentText()]
data.df = enumerate_duplicates(
data.df,
self.chooseColumnComboBox.currentText(),
meta_label=data.meta_label
)
rowchoices = data.df[
(data.meta_label, self.chooseColumnComboBox.currentText())]
for i in rowchoices:
obj.addItem(i)
except:
pass
[docs]
def set_spect_minmax(self, set_x=True, set_y=True):
try:
xvar = self.xVariableListWidget.selectedItems()[0].text()
datatemp = self.data[self.chooseDataComboBox.currentText()].df
if set_x:
vars = datatemp[xvar].columns.values
self.xminDoubleSpinBox.setValue(min(vars))
self.xmaxDoubleSpinBox.setValue(max(vars))
if set_y:
ycol = self.chooseColumnComboBox.currentText()
yrow = self.chooseRowsListWidget.selectedItems()[0].text()
vals = datatemp[datatemp[('meta', ycol)] == yrow][xvar]
self.yminSpinBox.setValue(vals.min(axis=1))
self.ymaxSpinBox.setValue(vals.max(axis=1))
except:
pass
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = PlotSpectra()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())