Esempio n. 1
0
    def __init__(self, model, parent):
        QDialog.__init__(self, parent)
        self.ui = Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("Aggregated Plot")
        self.ui.description.setText(
            "Aggregate values of x field using method. Show error bars from selected method. Legend from control panel is used. Max is not included in range when set. Bins are automatically determined when not set."
        )
        self.model = model

        self.ui.label_3.setText("Aggregate Method:")
        self.ui.zCombo.addItem("Average", np.average)
        self.ui.zCombo.addItem("Median", np.median)
        self.ui.zCombo.addItem("Min", np.min)
        self.ui.zCombo.addItem("Max", np.max)
        self.ui.zCombo.addItem("Count", len)
        self.ui.zCombo.addItem("Count Valid (not -1)",
                               lambda x: np.count_nonzero(x != -1))

        self.ui.label_4.setText("Error Bars:")
        self.ui.cCombo.addItem("None", None)
        self.ui.cCombo.addItem("Standard Deviation", lambda x: [np.std(x)])
        self.ui.cCombo.addItem("Min,Max", lambda x: [np.min(x), np.max(x)])

        self.ui.logCheckBox.setText("Transpose")
        cols = set(self.model.cols) - self.model.cfg.internalCols
        for col in sorted(cols, key=self.model.prettyname):
            self.ui.xCombo.addItem(self.model.prettyname(col), col)
            self.ui.yCombo.addItem(self.model.prettyname(col), col)
        self.accepted.connect(self.onAccept)
        self.ui.xCombo.currentIndexChanged.connect(self.onXComboChange)
        self.onXComboChange()
Esempio n. 2
0
    def __init__(self, model, parent):
        QDialog.__init__(self, parent)
        self.ui = Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("Pixel Plot")
        self.ui.description.setText(
            "Color pixels at each coordinate with the value of the color by field. Use to plot data according to real-space coordinates."
        )
        self.model = model

        self.ui.frame.hide()
        self.ui.zCombo.hide()
        self.ui.label_3.hide()
        self.ui.logCheckBox.hide()
        cols = set(self.model.cols) - self.model.cfg.internalCols
        for col in sorted(cols, key=self.model.prettyname):
            if model.cfg.dtype(col).startswith("i") or model.cfg.dtype(
                    col).startswith("u"):
                self.ui.xCombo.addItem(self.model.prettyname(col), col)
                self.ui.yCombo.addItem(self.model.prettyname(col), col)
            self.ui.cCombo.addItem(self.model.prettyname(col), col)
        if "chiprow" in cols:
            self.ui.yCombo.setCurrentIndex(
                self.ui.yCombo.findText(self.model.prettyname("chiprow")))
        elif "row" in cols:
            self.ui.yCombo.setCurrentIndex(
                self.ui.yCombo.findText(self.model.prettyname("row")))
        if "col" in cols:
            self.ui.xCombo.setCurrentIndex(
                self.ui.xCombo.findText(self.model.prettyname("col")))

        self.accepted.connect(self.onAccept)
Esempio n. 3
0
class MyScatterDialog(QDialog):
    def __init__(self, model, parent):
        QDialog.__init__(self, parent)
        self.ui = Ui_PlotDialog()
        self.ui.setupUi(self)
        self.ui.description.setText(
            "Select X and Y axis, and optional color by field")
        self.model = model

        self.ui.frame.hide()
        self.ui.zCombo.hide()
        self.ui.label_3.hide()
        self.ui.logCheckBox.hide()
        self.ui.cCombo.addItem("None", None)
        for col in sorted(set(self.model.cols) - self.model.cfg.internalCols,
                          key=self.model.prettyname):
            self.ui.xCombo.addItem(self.model.prettyname(col), col)
            self.ui.yCombo.addItem(self.model.prettyname(col), col)
            self.ui.cCombo.addItem(self.model.prettyname(col), col)
        self.accepted.connect(self.onAccept)

    def onAccept(self):
        p = MyFigure(parent=self.parent(), flags=Qt.Window)
        xfield = self.ui.xCombo.itemData(self.ui.xCombo.currentIndex())
        yfield = self.ui.yCombo.itemData(self.ui.yCombo.currentIndex())
        p.scatter(self.model, xfield, yfield,
                  self.ui.cCombo.itemData(self.ui.cCombo.currentIndex()))
        p.setWindowTitle(
            "%s - %s - Scatter" %
            (self.model.prettyname(xfield), self.model.prettyname(yfield)))
        p.show()
Esempio n. 4
0
class MyHist2dDialog(QDialog):
    def __init__(self, model, parent):
        QDialog.__init__(self, parent)
        self.ui = Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("2D Histogram")
        self.ui.description.setText(
            "Select X and Y axis, colors are determined by number of patterns in each bin."
        )
        self.model = model

        # Hide irrelevant combos so we can keep using the same UI file.
        self.ui.frame.hide()
        self.ui.zCombo.hide()
        self.ui.cCombo.hide()
        self.ui.label_3.hide()
        self.ui.label_4.hide()
        for col in sorted(set(self.model.cols) - self.model.cfg.internalCols,
                          key=self.model.prettyname):
            self.ui.xCombo.addItem(self.model.prettyname(col), col)
            self.ui.yCombo.addItem(self.model.prettyname(col), col)
        self.accepted.connect(self.onAccept)

    def onAccept(self):
        p = MyFigure(parent=self.parent(), flags=Qt.Window)
        xfield = self.ui.xCombo.itemData(self.ui.xCombo.currentIndex())
        yfield = self.ui.yCombo.itemData(self.ui.yCombo.currentIndex())
        p.histogram2D(self.model,
                      xfield,
                      yfield,
                      log=self.ui.logCheckBox.isChecked())
        p.setWindowTitle(
            "%s - %s - 2D Histogram" %
            (self.model.prettyname(xfield), self.model.prettyname(yfield)))
        p.show()
Esempio n. 5
0
    def __init__(self,model,parent):
        QDialog.__init__(self,parent)
        self.ui=Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("Comparison 2D Histogram")
        self.ui.description.setText("Select a field, and then two comparison groups to plot against each other")
        self.model = model

        self.ui.cCombo.hide()
        self.ui.label_4.hide()
        self.ui.label_3.setText("Field")
        z0=0
        x0=0
        y0=1
        zInit=model.datafield(model.cfg.hist2DCmpInitial)

        for i,col in enumerate(sorted(set(self.model.cols) - self.model.cfg.internalCols,key=self.model.prettyname)):
            self.ui.zCombo.addItem(self.model.prettyname(col),col)
            if zInit == col:
                z0=i

        lbls=self.model.labels(DataModel.compareGroupName)
        lblints=self.model.labelints(DataModel.compareGroupName)
        for i in range(len(lbls)):
            self.ui.xCombo.addItem(lbls[i],lblints[i])
            self.ui.yCombo.addItem(lbls[i],lblints[i])

        self.ui.xCombo.setCurrentIndex(x0)
        self.ui.yCombo.setCurrentIndex(y0)
        self.ui.zCombo.setCurrentIndex(z0)

        self.accepted.connect(self.onAccept)
Esempio n. 6
0
    def __init__(self,model,parent):
        QDialog.__init__(self,parent)
        self.ui=Ui_PlotDialog()
        self.ui.setupUi(self)
        self.ui.description.setText("Select X and Y axis, and optional color by field")
        self.model = model

        self.ui.zCombo.hide()
        self.ui.label_3.hide()
        self.ui.logCheckBox.hide()
        self.ui.cCombo.addItem("None",None)
        x0=0
        y0=0
        c0=0
        xInit=model.datafield(model.cfg.scatterInitialX)
        yInit=model.datafield(model.cfg.scatterInitialY)
        cInit=model.datafield(model.cfg.scatterInitialColor)
        for i,col in enumerate(sorted(set(self.model.cols) - self.model.cfg.internalCols,key=self.model.prettyname)):
            self.ui.xCombo.addItem(self.model.prettyname(col),col)
            self.ui.yCombo.addItem(self.model.prettyname(col),col)
            self.ui.cCombo.addItem(self.model.prettyname(col),col)
            if cInit == col:
                c0=i+1
            if xInit == col:
                x0=i
            if yInit == col:
                y0=i

        self.ui.yCombo.setCurrentIndex(y0)
        self.ui.cCombo.setCurrentIndex(c0)
        self.ui.xCombo.setCurrentIndex(x0)

        self.accepted.connect(self.onAccept)
Esempio n. 7
0
    def __init__(self,model,parent):
        QDialog.__init__(self,parent)
        self.ui=Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("2D Histogram")
        self.ui.description.setText("Select X and Y axis, colors are determined by number of patterns in each bin.")
        self.model = model

        # Hide irrelevant combos so we can keep using the same UI file.
        self.ui.zCombo.hide()
        self.ui.cCombo.hide()
        self.ui.label_3.hide()
        self.ui.label_4.hide()
        x0=0
        y0=0
        xInit=model.datafield(model.cfg.hist2dInitialX)
        yInit=model.datafield(model.cfg.hist2dInitialY)
        for i,col in enumerate(sorted(set(self.model.cols) - self.model.cfg.internalCols,key=self.model.prettyname)):
            self.ui.xCombo.addItem(self.model.prettyname(col),col)
            self.ui.yCombo.addItem(self.model.prettyname(col),col)
            if xInit == col:
                x0=i
            if yInit == col:
                y0=i

        self.ui.yCombo.setCurrentIndex(y0)
        self.ui.xCombo.setCurrentIndex(x0)
        self.accepted.connect(self.onAccept)
Esempio n. 8
0
    def __init__(self,model,parent):
        QDialog.__init__(self,parent)
        self.ui=Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("Aggregated Plot")
        self.ui.description.setText("Aggregate values of x field using method. Show error bars from selected method. Use legend for multiple lines. Max is not included in range when set. Bins are automatically determined when not set.")
        self.model = model

        self.ui.xCombo.hide()
        self.ui.label.hide()

        self.ui.label_3.setText("Aggregate Method:")
        self.ui.zCombo.addItem("Average",np.average)
        self.ui.zCombo.addItem("Median",np.median)
        self.ui.zCombo.addItem("Min",np.min)
        self.ui.zCombo.addItem("Max",np.max)
        self.ui.zCombo.addItem("Count",len)
        self.ui.zCombo.addItem("Count Valid (not -1)",lambda x : np.count_nonzero(x!=-1))

        self.ui.label_4.setText("Error Bars:")
        self.ui.cCombo.addItem("None",None)
        self.ui.cCombo.addItem("Standard Deviation",lambda x : [np.std(x)])
        self.ui.cCombo.addItem("Min,Max",lambda x : [np.min(x),np.max(x)])

        self.ui.logCheckBox.setText("Transpose")
        cols=set(self.model.cols) - self.model.cfg.internalCols
        yInit=model.datafield(model.cfg.aggplotInitialY)
        y0=0
        for i,col in enumerate(sorted(cols,key=self.model.prettyname)):
            self.ui.yCombo.addItem(self.model.prettyname(col),col)
            if col == yInit:
                y0=i
        self.ui.yCombo.setCurrentIndex(y0)
        self.accepted.connect(self.onAccept)

        self.aggFieldWidget=partitionWidget.MyPartitionWidget(model, None, model.cfg.aggplotInitialX, True, False, self)
        self.aggFieldWidget.ui.description.hide()
        self.aggFieldWidget.ui.groupBox.setTitle("X Axis (aggregated)")
        self.aggFieldWidget.ui.groupBox.setChecked(True)
        self.aggFieldWidget.ui.groupBox.setCheckable(False)
        self.aggFieldWidget.ui.listView.hide()
        self.aggFieldWidget.onComboChange()
        self.ui.verticalLayout_2.insertWidget(6,self.aggFieldWidget)

        self.legendWidget=partitionWidget.MyPartitionWidget(model, None, model.cfg.aggplotInitialLegend, True, True, self)
        self.legendWidget.ui.description.setText("Split results into lines.")
        self.legendWidget.ui.groupBox.setTitle("Lines")
        self.ui.verticalLayout_2.insertWidget(7,self.legendWidget)
        self.adjustSize()
Esempio n. 9
0
class MyPixelPlotDialog(QDialog):
    def __init__(self,model,parent):
        QDialog.__init__(self,parent)
        self.ui=Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("Pixel Plot")
        self.ui.description.setText("Color pixels at each coordinate with the value of the color by field. Use to plot data according to real-space coordinates.")
        self.model = model

        self.ui.zCombo.hide()
        self.ui.label_3.hide()
        self.ui.logCheckBox.hide()
        cols=set(self.model.cols) - self.model.cfg.internalCols
        i2=0
        x0=0
        y0=0
        c0=0
        xInit=model.datafield(model.cfg.pixelplotInitialX)
        yInit=model.datafield(model.cfg.pixelplotInitialY)
        cInit=model.datafield(model.cfg.pixelplotInitialColor)
        for i,col in enumerate(sorted(cols,key=self.model.prettyname)):
            if model.cfg.dtype(col).startswith("i") or model.cfg.dtype(col).startswith("u") or col in model.digitized:
                self.ui.xCombo.addItem(self.model.prettyname(col),col)
                self.ui.yCombo.addItem(self.model.prettyname(col),col)
                if col == xInit:
                    x0=i2
                if col == yInit:
                    y0=i2
                i2+=1
            self.ui.cCombo.addItem(self.model.prettyname(col),col)
            if cInit == col:
                c0=i

        self.ui.yCombo.setCurrentIndex(y0)
        self.ui.cCombo.setCurrentIndex(c0)
        self.ui.xCombo.setCurrentIndex(x0)

        self.accepted.connect(self.onAccept)

    def onAccept(self):
        p=MyFigure(parent=self.parent(),flags=Qt.Window)
        xfield=self.ui.xCombo.itemData(self.ui.xCombo.currentIndex())
        yfield=self.ui.yCombo.itemData(self.ui.yCombo.currentIndex())
        cfield=self.ui.cCombo.itemData(self.ui.cCombo.currentIndex())
        p.pixelPlot(self.model,xfield,yfield,cfield)
        p.setWindowTitle("%s - Pixel Plot" % (self.model.prettyname(cfield)))
        p.show()
Esempio n. 10
0
class MyCompareScatterDialog(QDialog):
    def __init__(self,model,parent):
        QDialog.__init__(self,parent)
        self.ui=Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("Comparison Scatter Plot")
        self.ui.description.setText("Select a field, and then two comparison groups to plot against each other")
        self.model = model

        self.ui.cCombo.hide()
        self.ui.label_4.hide()
        self.ui.logCheckBox.hide()
        self.ui.label_3.setText("Field")
        z0=0
        x0=0
        y0=1
        zInit=model.datafield(model.cfg.scatterCmpInitial)

        for i,col in enumerate(sorted(set(self.model.cols) - self.model.cfg.internalCols,key=self.model.prettyname)):
            self.ui.zCombo.addItem(self.model.prettyname(col),col)
            if zInit == col:
                z0=i

        lbls=self.model.labels(DataModel.compareGroupName)
        lblints=self.model.labelints(DataModel.compareGroupName)
        for i in range(len(lbls)):
            self.ui.xCombo.addItem(lbls[i],lblints[i])
            self.ui.yCombo.addItem(lbls[i],lblints[i])

        self.ui.xCombo.setCurrentIndex(x0)
        self.ui.yCombo.setCurrentIndex(y0)
        self.ui.zCombo.setCurrentIndex(z0)

        self.accepted.connect(self.onAccept)

    def onAccept(self):
        p=MyFigure(parent=self.parent(),flags=Qt.Window)
        field=self.ui.zCombo.itemData(self.ui.zCombo.currentIndex())
        xfield=int(self.ui.xCombo.itemData(self.ui.xCombo.currentIndex()))
        yfield=int(self.ui.yCombo.itemData(self.ui.yCombo.currentIndex()))
        xstr=DataModel.cmpColTemplate % (field, xfield, yfield)
        ystr=DataModel.cmpColTemplate % (field, yfield, xfield)
        p.scatter(self.model,xstr,ystr,None)
        p.setWindowTitle("%s - Compare Scatter" % (self.model.prettyname(field)))
        p.show()
Esempio n. 11
0
    def __init__(self, model, parent):
        QDialog.__init__(self, parent)
        self.ui = Ui_PlotDialog()
        self.ui.setupUi(self)
        self.ui.description.setText(
            "Select X and Y axis, and optional color by field")
        self.model = model

        self.ui.frame.hide()
        self.ui.zCombo.hide()
        self.ui.label_3.hide()
        self.ui.logCheckBox.hide()
        self.ui.cCombo.addItem("None", None)
        for col in sorted(set(self.model.cols) - self.model.cfg.internalCols,
                          key=self.model.prettyname):
            self.ui.xCombo.addItem(self.model.prettyname(col), col)
            self.ui.yCombo.addItem(self.model.prettyname(col), col)
            self.ui.cCombo.addItem(self.model.prettyname(col), col)
        self.accepted.connect(self.onAccept)
Esempio n. 12
0
class MyScatterDialog(QDialog):
    def __init__(self,model,parent):
        QDialog.__init__(self,parent)
        self.ui=Ui_PlotDialog()
        self.ui.setupUi(self)
        self.ui.description.setText("Select X and Y axis, and optional color by field")
        self.model = model

        self.ui.zCombo.hide()
        self.ui.label_3.hide()
        self.ui.logCheckBox.hide()
        self.ui.cCombo.addItem("None",None)
        x0=0
        y0=0
        c0=0
        xInit=model.datafield(model.cfg.scatterInitialX)
        yInit=model.datafield(model.cfg.scatterInitialY)
        cInit=model.datafield(model.cfg.scatterInitialColor)
        for i,col in enumerate(sorted(set(self.model.cols) - self.model.cfg.internalCols,key=self.model.prettyname)):
            self.ui.xCombo.addItem(self.model.prettyname(col),col)
            self.ui.yCombo.addItem(self.model.prettyname(col),col)
            self.ui.cCombo.addItem(self.model.prettyname(col),col)
            if cInit == col:
                c0=i+1
            if xInit == col:
                x0=i
            if yInit == col:
                y0=i

        self.ui.yCombo.setCurrentIndex(y0)
        self.ui.cCombo.setCurrentIndex(c0)
        self.ui.xCombo.setCurrentIndex(x0)

        self.accepted.connect(self.onAccept)

    def onAccept(self):
        p=MyFigure(parent=self.parent(),flags=Qt.Window)
        xfield=self.ui.xCombo.itemData(self.ui.xCombo.currentIndex())
        yfield=self.ui.yCombo.itemData(self.ui.yCombo.currentIndex())
        p.scatter(self.model,xfield,yfield,self.ui.cCombo.itemData(self.ui.cCombo.currentIndex()))
        p.setWindowTitle("%s - %s - Scatter" % (self.model.prettyname(xfield),self.model.prettyname(yfield)))
        p.show()
Esempio n. 13
0
    def __init__(self, model, parent):
        QDialog.__init__(self, parent)
        self.ui = Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("2D Histogram")
        self.ui.description.setText(
            "Select X and Y axis, colors are determined by number of patterns in each bin."
        )
        self.model = model

        # Hide irrelevant combos so we can keep using the same UI file.
        self.ui.frame.hide()
        self.ui.zCombo.hide()
        self.ui.cCombo.hide()
        self.ui.label_3.hide()
        self.ui.label_4.hide()
        for col in sorted(set(self.model.cols) - self.model.cfg.internalCols,
                          key=self.model.prettyname):
            self.ui.xCombo.addItem(self.model.prettyname(col), col)
            self.ui.yCombo.addItem(self.model.prettyname(col), col)
        self.accepted.connect(self.onAccept)
Esempio n. 14
0
class MyAggPlotDialog(QDialog):
    def __init__(self, model, parent):
        QDialog.__init__(self, parent)
        self.ui = Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("Aggregated Plot")
        self.ui.description.setText(
            "Aggregate values of x field using method. Show error bars from selected method. Legend from control panel is used. Max is not included in range when set. Bins are automatically determined when not set."
        )
        self.model = model

        self.ui.label_3.setText("Aggregate Method:")
        self.ui.zCombo.addItem("Average", np.average)
        self.ui.zCombo.addItem("Median", np.median)
        self.ui.zCombo.addItem("Min", np.min)
        self.ui.zCombo.addItem("Max", np.max)
        self.ui.zCombo.addItem("Count", len)
        self.ui.zCombo.addItem("Count Valid (not -1)",
                               lambda x: np.count_nonzero(x != -1))

        self.ui.label_4.setText("Error Bars:")
        self.ui.cCombo.addItem("None", None)
        self.ui.cCombo.addItem("Standard Deviation", lambda x: [np.std(x)])
        self.ui.cCombo.addItem("Min,Max", lambda x: [np.min(x), np.max(x)])

        self.ui.logCheckBox.setText("Transpose")
        cols = set(self.model.cols) - self.model.cfg.internalCols
        for col in sorted(cols, key=self.model.prettyname):
            self.ui.xCombo.addItem(self.model.prettyname(col), col)
            self.ui.yCombo.addItem(self.model.prettyname(col), col)
        self.accepted.connect(self.onAccept)
        self.ui.xCombo.currentIndexChanged.connect(self.onXComboChange)
        self.onXComboChange()

    def onAccept(self):
        #model,xfield,yfield,aggFunc,errFunc,partitions,tranpose
        p = MyFigure(parent=self.parent(), flags=Qt.Window)
        xfield = self.ui.xCombo.itemData(self.ui.xCombo.currentIndex())
        yfield = self.ui.yCombo.itemData(self.ui.yCombo.currentIndex())
        aggFunc = self.ui.zCombo.itemData(self.ui.zCombo.currentIndex())
        eFunc = self.ui.cCombo.itemData(self.ui.cCombo.currentIndex())
        tran = self.ui.logCheckBox.isChecked()
        minimum = None
        if self.ui.minCheckBox.isChecked():
            minimum = self.ui.minSpinBox.value()
        maximum = None
        if self.ui.maxCheckBox.isChecked():
            maximum = self.ui.maxSpinBox.value()
        bins = None
        if self.ui.binCheckBox.isChecked():
            bins = self.ui.binSpinBox.value()
        part = self.model.partition(xfield, minimum, maximum, bins)
        errTxt = ""
        if eFunc is not None:
            errTxt = u" \u00B1 %s" % (self.ui.cCombo.currentText())
        aggtext = "%s %s%s" % (self.ui.zCombo.currentText(), "%s", errTxt)
        p.aggPlot(self.model, xfield, yfield, aggFunc, eFunc, part, tran,
                  aggtext)
        p.setWindowTitle(
            "%s %s - %s Aggregated Plot" %
            (self.ui.zCombo.currentText(), self.model.prettyname(xfield),
             self.model.prettyname(yfield)))
        p.show()
        pass

    def onXComboChange(self):
        field = self.ui.xCombo.itemData(self.ui.xCombo.currentIndex())

        self.ui.minSpinBox.setMinimum(self.model.fieldmin(field))
        self.ui.maxSpinBox.setMinimum(self.model.fieldmin(field))
        self.ui.minSpinBox.setMaximum(self.model.fieldmax(field))
        self.ui.maxSpinBox.setMaximum(self.model.fieldmax(field))

        self.ui.minSpinBox.setValue(self.model.fieldmin(field))
        self.ui.maxSpinBox.setValue(self.model.fieldmax(field))
Esempio n. 15
0
class MyAggPlotDialog(QDialog):
    def __init__(self,model,parent):
        QDialog.__init__(self,parent)
        self.ui=Ui_PlotDialog()
        self.ui.setupUi(self)
        self.setWindowTitle("Aggregated Plot")
        self.ui.description.setText("Aggregate values of x field using method. Show error bars from selected method. Use legend for multiple lines. Max is not included in range when set. Bins are automatically determined when not set.")
        self.model = model

        self.ui.xCombo.hide()
        self.ui.label.hide()

        self.ui.label_3.setText("Aggregate Method:")
        self.ui.zCombo.addItem("Average",np.average)
        self.ui.zCombo.addItem("Median",np.median)
        self.ui.zCombo.addItem("Min",np.min)
        self.ui.zCombo.addItem("Max",np.max)
        self.ui.zCombo.addItem("Count",len)
        self.ui.zCombo.addItem("Count Valid (not -1)",lambda x : np.count_nonzero(x!=-1))

        self.ui.label_4.setText("Error Bars:")
        self.ui.cCombo.addItem("None",None)
        self.ui.cCombo.addItem("Standard Deviation",lambda x : [np.std(x)])
        self.ui.cCombo.addItem("Min,Max",lambda x : [np.min(x),np.max(x)])

        self.ui.logCheckBox.setText("Transpose")
        cols=set(self.model.cols) - self.model.cfg.internalCols
        yInit=model.datafield(model.cfg.aggplotInitialY)
        y0=0
        for i,col in enumerate(sorted(cols,key=self.model.prettyname)):
            self.ui.yCombo.addItem(self.model.prettyname(col),col)
            if col == yInit:
                y0=i
        self.ui.yCombo.setCurrentIndex(y0)
        self.accepted.connect(self.onAccept)

        self.aggFieldWidget=partitionWidget.MyPartitionWidget(model, None, model.cfg.aggplotInitialX, True, False, self)
        self.aggFieldWidget.ui.description.hide()
        self.aggFieldWidget.ui.groupBox.setTitle("X Axis (aggregated)")
        self.aggFieldWidget.ui.groupBox.setChecked(True)
        self.aggFieldWidget.ui.groupBox.setCheckable(False)
        self.aggFieldWidget.ui.listView.hide()
        self.aggFieldWidget.onComboChange()
        self.ui.verticalLayout_2.insertWidget(6,self.aggFieldWidget)

        self.legendWidget=partitionWidget.MyPartitionWidget(model, None, model.cfg.aggplotInitialLegend, True, True, self)
        self.legendWidget.ui.description.setText("Split results into lines.")
        self.legendWidget.ui.groupBox.setTitle("Lines")
        self.ui.verticalLayout_2.insertWidget(7,self.legendWidget)
        self.adjustSize()

        

    def onAccept(self):
#model,xfield,yfield,aggFunc,errFunc,partitions,tranpose
        p=MyFigure(parent=self.parent(),flags=Qt.Window)
        xfield=self.aggFieldWidget.ui.comboBox.itemData(self.aggFieldWidget.ui.comboBox.currentIndex())
        yfield=self.ui.yCombo.itemData(self.ui.yCombo.currentIndex())
        aggFunc=self.ui.zCombo.itemData(self.ui.zCombo.currentIndex())
        eFunc=self.ui.cCombo.itemData(self.ui.cCombo.currentIndex())
        tran=self.ui.logCheckBox.isChecked()
        errTxt=""
        if eFunc is not None:
            errTxt=u" \u00B1 %s"%(self.ui.cCombo.currentText())
        aggtext="%s %s%s"%(self.ui.zCombo.currentText(),"%s",errTxt)
        p.aggPlot(self.model,xfield,yfield,aggFunc,eFunc,self.aggFieldWidget.current(),tran,aggtext,self.legendWidget.currentStacks())
        p.setWindowTitle("%s %s - %s Aggregated Plot" % (self.ui.zCombo.currentText(),self.model.prettyname(xfield),self.model.prettyname(yfield)))
        p.show()
        pass