示例#1
1
class matplotlibWidget(QWidget):
    def __init__(self, parent = None):
        QWidget.__init__(self, parent)
        self.canvas = MplCanvas()
        self.gl = QGridLayout()
        alignment = Qt.Alignment()
        self.gl.addWidget(self.canvas,0,0,-1,-1,alignment)

        self.toolbar = NavigationToolbar(self.canvas, self)
        self.toolbar.hide()

        # Just some button 

        self.button1 = QPushButton('Zoom')
        self.button1.clicked.connect(self.zoom)

        self.button2 = QPushButton('Pan')
        self.button2.clicked.connect(self.pan)

        self.button3 = QPushButton('Home')
        self.button3.clicked.connect(self.home)

        self.gl.addWidget(self.toolbar,1,0,alignment)
        self.gl.addWidget(self.button1,1,1,alignment)
        self.gl.addWidget(self.button2,1,2,alignment)
        self.gl.addWidget(self.button3,1,3,alignment)

        self.setLayout(self.gl)

    def home(self):
        self.toolbar.home()
    def zoom(self):
        self.toolbar.zoom()
    def pan(self):
        self.toolbar.pan()
示例#2
0
    def release_zoom(self, event):
        """
        override zoom released method
        """
        self.canvas_zoom_released.emit()

        NavigationToolbar2QT.release_zoom(self, event)
示例#3
0
class MyMplCanvas(FigureCanvas):
    """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""

    def __init__(self, parent=None, width=5, height=4, dpi=100):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        # We want the axes cleared every time plot() is called
        self.axes.hold(False)

        self.compute_initial_figure()

        #
        FigureCanvas.__init__(self, fig)
        self.setParent(parent)
        self.setStyleSheet("{background-color:transparent;border:none;}")

        """FigureCanvas.setSizePolicy(self,
                                   QtWidgets.QSizePolicy.Expanding,
                                   QtWidgets.QSizePolicy.Expanding)"""

        FigureCanvas.updateGeometry(self)

        self.tootlbar = NavigationToolbar(self, parent)
        self.tootlbar.hide()

        self.fid = 0
        self.data = []
        self.index = []

    def compute_initial_figure(self):
        pass
示例#4
0
def press_zoom(self, event):
    """
    Method that is used to limit zoom to the x axis. Based on
    http://stackoverflow.com/a/16709952/5215507
    """
    event.key = 'x'
    NavigationToolbar.press_zoom(self, event)
示例#5
0
    def draw(self):
        """
        Canvas is drawn called by pan(), zoom()
        :return:
        """
        NavigationToolbar2QT.draw(self)

        self._myParent.evt_view_updated()
示例#6
0
    def _update_view(self):
        """
        view update called by home(), back() and forward()
        :return:
        """
        NavigationToolbar2QT._update_view(self)

        self._myParent.evt_view_updated()
示例#7
0
	def __init__(self, *args, **kwargs):
		NavigationToolbar2QT.__init__(self, *args, **kwargs)

		self.init_buttons()
		self.panAction.setCheckable(True)
		self.zoomAction.setCheckable(True)

		# remove the subplots action
		self.removeAction( self.subplotsAction )
示例#8
0
    def __init__(self, canvas_, parent_):
#        backend.figureoptions = None  # Monkey patched to kill the figure options button on matplotlib toolbar

#        self.toolitems = (
#            ('Home', 'Reset original view', 'home', 'home'),
#            ('Back', 'Back to previous view', 'back', 'back'),
#            ('Forward', 'Forward to next view', 'forward', 'forward'),
#            (None, None, None, None),
#            ('Pan', 'Pan axes with left mouse, zoom with right', 'move', 'pan'),
#            ('Zoom', 'Zoom to rectangle', 'zoom_to_rect', 'zoom'),
#            (None, None, None, None),
#            ('Save', 'Save the current image', 'filesave', 'save_figure'),
#            )
        NavigationToolbar2QT.__init__(self, canvas_, parent_)
示例#9
0
    def zoom(self, *args):
        """
        Turn on/off zoom (zoom button)
        :param args:
        :return:
        """
        NavigationToolbar2QT.zoom(self, args)

        if self._myMode == NAVIGATION_MODE_ZOOM:
            # out of zoom mode
            self._myMode = NAVIGATION_MODE_NONE
        else:
            # into zoom mode
            self._myMode = NAVIGATION_MODE_ZOOM
示例#10
0
    def __init__(self, parent, canvas):
        """ Initialization
        built-in methods
        - drag_zoom(self, event): triggered during holding the mouse and moving
        """
        NavigationToolbar2QT.__init__(self, canvas, canvas)

        # parent
        self._myParent = parent
        # tool bar mode
        self._myMode = NAVIGATION_MODE_NONE

        # connect the events to parent
        self.home_button_pressed.connect(self._myParent.evt_toolbar_home)
        self.canvas_zoom_released.connect(self._myParent.evt_zoom_released)
示例#11
0
    def __init__(self, parent=None):
        super(Widgetmain, self).__init__(parent)

        self.figure = Figure()

        # plt.subplots_adjust(left=0.031, right=0.999, top=0.99, bottom=0.03)
        # plt.subplots_adjust(left=0.001, right=0.999, top=0.999, bottom=0.001)

        self.canvas = FigureCanvas(self.figure)

        self.toolbar = NavigationToolbar(self.canvas, self)

        # uncomment for disabling plot toolbar, not recommended
        self.toolbar.hide()

        # set the layout
        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.toolbar)
        self.layout.addWidget(self.canvas)
        self.setLayout(self.layout)

        # set the plot class handlers
        self.wzoom = plot_tools.WheellZoom()
        self.adapt = plot_tools.WindowResize()  # keep tight layout
        self.cursor = plot_tools.SnaptoCursor()
        self.selector = plot_tools.Select()
        self.selection = plot_tools.Selection()
        self.dataplot = None
示例#12
0
    def pan(self, *args):
        """

        :param args:
        :return:
        """
        NavigationToolbar2QT.pan(self, args)

        if self._myMode == NAVIGATION_MODE_PAN:
            # out of pan mode
            self._myMode = NAVIGATION_MODE_NONE
        else:
            # into pan mode
            self._myMode = NAVIGATION_MODE_PAN

        print('PANNED')
示例#13
0
 def addmpl(self, fig):
     self.canvas = FigureCanvas(fig)
     self.canvas.mpl_connect('button_press_event',self.on_click)
     self.mplvl.addWidget(self.canvas)
     self.canvas.draw()
     self.toolbar = NavigationToolbar(self.canvas,self.mplwindow,coordinates=True)
     self.mplvl.addWidget(self.toolbar)
示例#14
0
 def addmpl(self):
     # add plot to anvas
     self.rmmpl()
     self.canvas = FigureCanvas(self.fig)
     self.mplvl.addWidget(self.canvas)
     self.canvas.draw()
     self.toolbar = NavigationToolbar(self.canvas, self.mplwindow)
     self.mplvl.addWidget(self.toolbar)
    def __init__(self, parent, settingsdict1={}, obsid=''):
        utils.start_waiting_cursor()#show the user this may take a long time...
        self.obsid = obsid
        self.log_pos = None
        self.y_pos = None
        self.meas_ts = None
        self.head_ts = None
        self.head_ts_for_plot = None
        self.level_masl_ts = None
        self.loggerpos_masl_or_offset_state = 1

        self.settingsdict = settingsdict1
        qgis.PyQt.QtWidgets.QDialog.__init__(self, parent)
        self.setAttribute(qgis.PyQt.QtCore.Qt.WA_DeleteOnClose)
        self.setupUi(self) # Required by Qt4 to initialize the UI
        self.setWindowTitle(ru(QCoreApplication.translate('Calibrlogger', "Calculate water level from logger"))) # Set the title for the dialog
        self.INFO.setText(ru(QCoreApplication.translate('Calibrlogger', "Select the observation point with logger data to be adjusted.")))
        self.log_calc_manual.setText("<a href=\"https://github.com/jkall/qgis-midvatten-plugin/wiki/4.-Edit-data\">Midvatten manual</a>")
      
        # Create a plot window with one single subplot
        self.calibrplotfigure = plt.figure()
        self.axes = self.calibrplotfigure.add_subplot( 111 )
        self.canvas = FigureCanvas( self.calibrplotfigure )
        self.mpltoolbar = NavigationToolbar( self.canvas, self.widgetPlot )
        self.layoutplot.addWidget( self.canvas )
        self.layoutplot.addWidget( self.mpltoolbar )

        self.show()

        self.cid =[]
                
        self.pushButtonSet.clicked.connect(lambda x: self.set_logger_pos())
        self.pushButtonAdd.clicked.connect(lambda x: self.add_to_level_masl())
        self.pushButtonFrom.clicked.connect(lambda x: self.set_from_date_from_x())
        self.pushButtonTo.clicked.connect(lambda x: self.set_to_date_from_x())
        self.L1_button.clicked.connect(lambda x: self.set_adjust_data('L1_date', 'L1_level'))
        self.L2_button.clicked.connect(lambda x: self.set_adjust_data('L2_date', 'L2_level'))
        self.M1_button.clicked.connect(lambda x: self.set_adjust_data('M1_date', 'M1_level'))
        self.M2_button.clicked.connect(lambda x: self.set_adjust_data('M2_date', 'M2_level'))
        self.pushButton_from_extent.clicked.connect(lambda: self.FromDateTime.setDateTime(num2date(self.axes.get_xbound()[0])))
        self.pushButton_to_extent.clicked.connect(lambda: self.ToDateTime.setDateTime(num2date(self.axes.get_xbound()[1])))
        self.pushButtonupdateplot.clicked.connect(lambda x: self.update_plot())
        self.pushButtonLpos.clicked.connect(lambda x: self.catch_old_level())
        self.pushButtonMpos.clicked.connect(lambda x: self.catch_new_level())
        self.pushButtonMpos.setEnabled(False)
        self.pushButtonCalcBestFit.clicked.connect(lambda x: self.logger_pos_best_fit())
        self.pushButtonCalcBestFit.setToolTip(ru(QCoreApplication.translate('Calibrlogger', 'This will calibrate all values inside the chosen period\nusing the mean difference between head_cm and w_levels measurements.\n\nThe search radius is the maximum time distance allowed\n between a logger measurement and a w_level measurement.')))
        self.pushButtonCalcBestFit2.clicked.connect(lambda x: self.level_masl_best_fit())
        self.pushButtonCalcBestFit2.setToolTip(ru(QCoreApplication.translate('Calibrlogger', 'This will calibrate all values inside the chosen period\nusing the mean difference between level_masl and w_levels measurements.\n\nThe search radius is the maximum time distance allowed\n between a logger measurement and a w_level measurement.')))
        self.pushButton_delete_logger.clicked.connect(lambda: self.delete_selected_range('w_levels_logger'))
        self.adjust_trend_button.clicked.connect(lambda x: self.adjust_trend_func())

        self.get_search_radius()

        # Populate combobox with obsid from table w_levels_logger
        self.load_obsid_from_db()

        utils.stop_waiting_cursor()#now this long process is done and the cursor is back as normal
示例#16
0
 def __init__(self):
   super(Scanner, self).__init__()
   self.setupUi(self)
   # IP address validator
   rx = QRegExp('^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$')
   self.addrValue.setValidator(QRegExpValidator(rx, self.addrValue))
   # state variable
   self.idle = True
   # number of samples to show on the plot
   self.size = 512 * 512
   self.freq = 143.0
   # buffer and offset for the incoming samples
   self.buffer = bytearray(8 * self.size)
   self.offset = 0
   self.data = np.frombuffer(self.buffer, np.int32)
   # create figure
   figure = Figure()
   figure.set_facecolor('none')
   self.axes = figure.add_subplot(111)
   self.canvas = FigureCanvas(figure)
   self.plotLayout.addWidget(self.canvas)
   self.axes.axis((0.0, 512.0, 0.0, 512.0))
   x, y = np.meshgrid(np.linspace(0.0, 512.0, 513), np.linspace(0.0, 512.0, 513))
   z = x / 512.0 + y * 0.0
   self.mesh = self.axes.pcolormesh(x, y, z, cmap = cm.plasma)
   # create navigation toolbar
   self.toolbar = NavigationToolbar(self.canvas, self.plotWidget, False)
   # remove subplots action
   actions = self.toolbar.actions()
   if int(matplotlib.__version__[0]) < 2:
     self.toolbar.removeAction(actions[7])
   else:
     self.toolbar.removeAction(actions[6])
   self.plotLayout.addWidget(self.toolbar)
   # create TCP socket
   self.socket = QTcpSocket(self)
   self.socket.connected.connect(self.connected)
   self.socket.readyRead.connect(self.read_data)
   self.socket.error.connect(self.display_error)
   # connect signals from buttons and boxes
   self.connectButton.clicked.connect(self.start)
   self.scanButton.clicked.connect(self.scan)
   self.periodValue.valueChanged.connect(self.set_period)
   self.trgtimeValue.valueChanged.connect(self.set_trgtime)
   self.trginvCheck.stateChanged.connect(self.set_trginv)
   self.shdelayValue.valueChanged.connect(self.set_shdelay)
   self.shtimeValue.valueChanged.connect(self.set_shtime)
   self.shinvCheck.stateChanged.connect(self.set_shinv)
   self.acqdelayValue.valueChanged.connect(self.set_acqdelay)
   self.samplesValue.valueChanged.connect(self.set_samples)
   self.pulsesValue.valueChanged.connect(self.set_pulses)
   # create timers
   self.startTimer = QTimer(self)
   self.startTimer.timeout.connect(self.timeout)
   self.meshTimer = QTimer(self)
   self.meshTimer.timeout.connect(self.update_mesh)
   # set default values
   self.periodValue.setValue(200.0)
示例#17
0
class MatplotlibWidget(QWidget):

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.frame = QWidget()
        self.canvas = MplCanvas()
        self.canvas.setParent(self.frame)
        self.mpltoolbar = Navigationtoolbar(self.canvas, self.frame)
        self.vbl = QVBoxLayout()
        self.vbl.addWidget(self.canvas)
        self.vbl.addWidget(self.mpltoolbar)
        self.setLayout(self.vbl)

        self.mpltoolbar.toggleViewAction()

    def setTitle(self, text):
        """
        Sets the figure title
        """
        self.canvas.setTitle(text)

    def get_axis(self):
        return self.canvas.ax

    def get_figure(self):
        return self.canvas.fig

    def clear(self, force=False):
        if force:
            self.canvas.fig.clear()
            self.canvas.ax = self.canvas.fig.add_subplot(111)
            # self.canvas.ax.clear()
            # self.canvas = MplCanvas()
        else:
            self.canvas.ax.clear()

    def redraw(self):
        self.canvas.ax.figure.canvas.draw()

    def plot(self, x, y, title='', xlabel='', ylabel=''):
        self.setTitle(title)
        self.canvas.ax.plot(x, y)

        self.redraw()
    def _initGui(self):
        """setup the user interface"""
        self.ui = Ui_elevationDlg()
        self.ui.setupUi(self)
                
        #get settings
        self.s = QSettings()
        self.loadSettings()

        self.gh = geometryHelper( self.iface )
        self.eh = elevationHelper( self.iface, self.startDir)
        
        #setup a message bar
        self.bar = QgsMessageBar() 
        self.bar.setSizePolicy( QSizePolicy.Minimum, QSizePolicy.Fixed )
        self.ui.verticalLayout.addWidget(self.bar)
        
        self.ui.buttonBox.addButton(QPushButton("Sluiten"), QDialogButtonBox.RejectRole )
        for btn in self.ui.buttonBox.buttons():
            btn.setAutoDefault(0)
                  
        ##graph global vars
        self.Rubberline =  None
        self.profile = None
        self.pt = None
        self.ax = None
        self.ano = None
        self.anoLbl = None
        self.counter = 0
        self.xscaleUnit = (1, "m")
        
        # a figure instance to plot on
        self.figure = Figure()

        #create the Canvas widget and toolbar and set graphWgt as parent
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, self)

        ###
        #self.ui.toolbar.layout().insertWidget(0, self.toolbar)
        self.ui.graphWgt.layout().addWidget(self.canvas)
        self.createCanvasToolbar()
        
        #events
        self.ui.drawBtn.clicked.connect(self.drawBtnClicked)
        self.figure.canvas.mpl_connect('motion_notify_event', self.showGraphMotion)
        self.ui.saveLineBtn.clicked.connect(self.saveLineClicked)
        self.ui.savePntBtn.clicked.connect(self.savePntClicked)
        self.ui.addDHMbtn.clicked.connect(self.addDHMasWMS) 
        self.ui.refreshBtn.clicked.connect( self.onRefresh )
        self.ui.buttonBox.helpRequested.connect(self.openHelp)
        
        self.rejected.connect(self.clean )
示例#19
0
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.frame = QWidget()
        self.canvas = MplCanvas()
        self.canvas.setParent(self.frame)
        self.mpltoolbar = Navigationtoolbar(self.canvas, self.frame)
        self.vbl = QVBoxLayout()
        self.vbl.addWidget(self.canvas)
        self.vbl.addWidget(self.mpltoolbar)
        self.setLayout(self.vbl)

        self.mpltoolbar.toggleViewAction()
示例#20
0
    def __init__(self, parent = None):

        # initialization of Qt MainWindow widget
        QtWidgets.QWidget.__init__(self, parent)
        
        # set the canvas to the Matplotlib widget
        self.canvas = MplCanvas()

        self.ntb = NavigationToolbar(self.canvas, self)
        
        #self.ntb.removeAction(self.ntb.buttons[0])
        self.ntb.clear()
        
        program_folder = os.path.join(os.path.dirname(__file__), "ims")

        a = self.ntb.addAction(self.ntb._icon(os.path.join(program_folder, "world.png")), 'Home', self.zoom2fullextent)
        a.setToolTip('Reset original view')
        a = self.ntb.addAction(self.ntb._icon(os.path.join(program_folder, "arrow_left.png")), 'Back', self.ntb.back)
        a.setToolTip('Back to previous view')
        a = self.ntb.addAction(self.ntb._icon(os.path.join(program_folder, "arrow_right.png")), 'Forward', self.ntb.forward)
        a.setToolTip('Forward to next view')

        a = self.ntb.addAction(self.ntb._icon(os.path.join(program_folder, "arrow_out.png")), 'Pan', self.ntb.pan)
        a.setToolTip('Pan axes with left mouse, zoom with right')
        a = self.ntb.addAction(self.ntb._icon(os.path.join(program_folder, "zoom.png")), 'Zoom', self.ntb.zoom)
        a.setToolTip('Zoom to rectangle')

        action_SetSrcPt = self.ntb.addAction(self.ntb._icon(os.path.join(program_folder, "bullet_red.png")), 'Source point', self.pt_map)
        action_SetSrcPt.setToolTip('Set source point in map') 

        a = self.ntb.addAction(self.ntb._icon(os.path.join(program_folder, "camera.png")), 'Save',
                self.ntb.save_figure)
        a.setToolTip('Save map as image')

        a = self.ntb.addAction(self.ntb._icon(os.path.join(program_folder, "help.png")), 'Help',
                self.openHelp)
        a.setToolTip('Help')
        
        a = self.ntb.addAction(self.ntb._icon(os.path.join(program_folder, "information.png")), 'About',
                self.helpAbout)
        a.setToolTip('About')        
                                            
        # create a vertical box layout
        self.vbl = QtWidgets.QVBoxLayout()
        
        # add widgets to the vertical box
        self.vbl.addWidget(self.canvas)
        self.vbl.addWidget(self.ntb)
                                                             
        # set the layout to the vertical box
        self.setLayout(self.vbl)        
示例#21
0
    def initUI(self):
        self.setWindowTitle('NyqLab: Scope')

        # Figure
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        toolbar = NavigationToolbar(self.canvas, self)

        # Eye diagram toolbar button
        action_eye = QtWidgets.QAction(QtGui.QIcon('media/eye'), 'Scope', self)
        action_eye.triggered.connect(self.onEyeClick)
        toolbar.addAction(action_eye)

        # Axis
        self.ax_t = self.figure.add_subplot(2, 1, 1)
        self.ax_t.grid(True, which='major', linestyle='--')
        self.ax_t.set_xlabel('$t / T_\mathrm{b}$')
        self.ax_t.axis(self.ax_t_lim_free)
        self.ax_t.xaxis.set_major_locator(ticker.MultipleLocator(1.0))
        self.ax_t.yaxis.set_major_locator(ticker.MultipleLocator(0.5))

        self.ax_f = self.figure.add_subplot(2, 1, 2)
        self.ax_f.axis(self.ax_f_lim)
        self.ax_f.grid(True, which='major', linestyle='--')
        self.ax_f.set_xlabel('$f / R_\mathrm{b}$')
        self.ax_f.xaxis.set_major_locator(ticker.MultipleLocator(0.5))
        self.ax_f.yaxis.set_major_locator(ticker.MultipleLocator(10.0))


        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(toolbar)
        layout.addWidget(self.canvas)

        widget = QtWidgets.QWidget(self)
        self.setCentralWidget(widget)
        widget.setLayout(layout)
        self.resize(800, 500)
示例#22
0
 def __init__(self):
   super(PulsedNMR, self).__init__()
   self.setupUi(self)
   self.rateValue.addItems(['25', '50', '250', '500', '2500'])
   # IP address validator
   rx = QRegExp('^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$')
   self.addrValue.setValidator(QRegExpValidator(rx, self.addrValue))
   # state variable
   self.idle = True
   # number of samples to show on the plot
   self.size = 50000
   # buffer and offset for the incoming samples
   self.buffer = bytearray(8 * self.size)
   self.offset = 0
   self.data = np.frombuffer(self.buffer, np.complex64)
   # create figure
   figure = Figure()
   figure.set_facecolor('none')
   self.axes = figure.add_subplot(111)
   self.canvas = FigureCanvas(figure)
   self.plotLayout.addWidget(self.canvas)
   # create navigation toolbar
   self.toolbar = NavigationToolbar(self.canvas, self.plotWidget, False)
   # remove subplots action
   actions = self.toolbar.actions()
   self.toolbar.removeAction(actions[7])
   self.plotLayout.addWidget(self.toolbar)
   # create TCP socket
   self.socket = QTcpSocket(self)
   self.socket.connected.connect(self.connected)
   self.socket.readyRead.connect(self.read_data)
   self.socket.error.connect(self.display_error)
   # connect signals from buttons and boxes
   self.startButton.clicked.connect(self.start)
   self.freqValue.valueChanged.connect(self.set_freq)
   self.awidthValue.valueChanged.connect(self.set_awidth)
   self.deltaValue.valueChanged.connect(self.set_delta)
   self.rateValue.currentIndexChanged.connect(self.set_rate)
   # set rate
   self.rateValue.setCurrentIndex(2)
   # create timer for the repetitions
   self.timer = QTimer(self)
   self.timer.timeout.connect(self.fire)
    def __init__(self, parent=None, dpi=100):
        # Create figure and axes, the axes should cover the entire figure size
        figure = Figure(dpi=dpi, frameon=False)
        self.axes = figure.add_axes((0, 0, 1, 1), facecolor='black')

        # Hide the x and y axis, we just want to see the image
        self.axes.get_xaxis().set_visible(False)
        self.axes.get_yaxis().set_visible(False)

        # Initialize the parent FigureCanvas
        FigureCanvas.__init__(self, figure)
        self.setParent(parent)

        # Set background of the widget to be close to black
        # The color is not made actually black so that the user can distinguish the image bounds from the figure bounds
        self.setStyleSheet('background-color: #222222;')

        # Set widget to have strong focus to receive key press events
        self.setFocusPolicy(Qt.StrongFocus)

        # Create navigation toolbar and hide it
        # We don't want the user to see the toolbar but we are making our own in the user interface that will call
        # functions from the toolbar
        self.toolbar = NavigationToolbar(self, self)
        self.toolbar.hide()

        # Update size policy and geometry
        FigureCanvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

        self.isLPS = False
        self.isLAS = False
        self.image = None
        self.sliceNumber = 0
        self.diaphragmAxial = None
        self.umbilicisInferior = None
        self.umbilicisSuperior = None
        self.umbilicisLeft = None
        self.umbilicisRight = None
        self.umbilicisCoronal = None
        self.CATLine = None
        self.leftArmBounds = None
        self.rightArmBounds = None
示例#24
0
 def __init__(self, layout, vna):
   # create figure
   self.figure = Figure()
   if sys.platform != 'win32':
     self.figure.set_facecolor('none')
   self.canvas = FigureCanvas(self.figure)
   layout.addWidget(self.canvas)
   # create navigation toolbar
   self.toolbar = NavigationToolbar(self.canvas, None, False)
   self.toolbar.layout().setSpacing(6)
   # remove subplots action
   actions = self.toolbar.actions()
   if int(matplotlib.__version__[0]) < 2:
     self.toolbar.removeAction(actions[7])
   else:
     self.toolbar.removeAction(actions[6])
   self.toolbar.addSeparator()
   self.cursorLabels = {}
   self.cursorValues = {}
   self.cursorMarkers = {}
   self.cursorPressed = {}
   for i in range(len(self.cursors)):
     self.cursorMarkers[i] = None
     self.cursorPressed[i] = False
     self.cursorLabels[i] = QLabel('Cursor %d, kHz' % (i + 1))
     self.cursorLabels[i].setStyleSheet('color: %s' % self.colors[i])
     self.cursorValues[i] = QSpinBox()
     self.cursorValues[i].setMinimumSize(90, 0)
     self.cursorValues[i].setSingleStep(10)
     self.cursorValues[i].setAlignment(Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter)
     self.toolbar.addWidget(self.cursorLabels[i])
     self.toolbar.addWidget(self.cursorValues[i])
     self.cursorValues[i].valueChanged.connect(partial(self.set_cursor, i))
     self.canvas.mpl_connect('button_press_event', partial(self.press_marker, i))
     self.canvas.mpl_connect('motion_notify_event', partial(self.move_marker, i))
     self.canvas.mpl_connect('button_release_event', partial(self.release_marker, i))
   self.toolbar.addSeparator()
   self.plotButton = QPushButton('Rescale')
   self.toolbar.addWidget(self.plotButton)
   layout.addWidget(self.toolbar)
   self.plotButton.clicked.connect(self.plot)
   self.mode = None
   self.vna = vna
示例#25
0
文件: mplwidget.py 项目: pepojs/DES
    def __init__(self, parent = None):

        QWidget.__init__(self, parent)

        self.canvas = FigureCanvas(Figure())


        vertical_layout = QVBoxLayout()
        vertical_layout.addWidget(self.canvas)

        self.canvas.axes = self.canvas.figure.add_subplot(111)
        self.setLayout(vertical_layout)
        self.toolbar = NavigationToolbar2QT(self.canvas,self,coordinates=True)
        vertical_layout.addWidget(self.toolbar)

        img = plt.imread('map.png',0)

        print(self.points_for_ride([5,5],[20,20], 2, 5))

        self.canvas.axes.imshow(img)
示例#26
0
    def __init__(self,
                 parent: QWidget,
                 row: int = 1,
                 col: int = 1,
                 polar: bool = False):
        """Input title and two axises, QChart class has no parent."""
        super(DataChart, self).__init__(parent)
        layout = QVBoxLayout(self)
        figure = Figure()
        canvas = FigureCanvasQTAgg(figure)
        layout.addWidget(NavigationToolbar2QT(canvas, self))
        layout.addWidget(canvas)
        self._ax: List[Axes] = []
        for i in range(1, row * col + 1):
            self._ax.append(figure.add_subplot(row, col, i, polar=polar))

        def set_margin(m: float) -> None:
            figure.tight_layout(pad=m)

        self.set_margin = set_margin
示例#27
0
    def __init__(self, parent=None, flags=QtCore.Qt.WindowFlags()):
        super().__init__(parent=parent, flags=flags)

        self.setWindowTitle("Visualización de distribución")

        # Main widget to be displayed
        self.content = QWidget()
        self.layout = QVBoxLayout()

        # Canvas is the object that holds the graph
        self.canvas = MplCanvas()
        self.toolbox = NavigationToolbar2QT(self.canvas, self.content)

        # Add the widgets to a vertical layout
        self.layout.addWidget(self.toolbox)
        self.layout.addWidget(self.canvas)

        # Set the content as the central widget
        self.content.setLayout(self.layout)
        self.setCentralWidget(self.content)
示例#28
0
    def __init__(self, parent=None, width=5, height=4, dpi=100):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        # We want the axes cleared every time plot() is called
        self.axes.hold(False)

        self.compute_initial_figure()

        #
        FigureCanvas.__init__(self, fig)
        self.setParent(parent)

        '''FigureCanvas.setSizePolicy(self,
                                   QtWidgets.QSizePolicy.Expanding,
                                   QtWidgets.QSizePolicy.Expanding)'''

        FigureCanvas.updateGeometry(self)

        self.tootlbar=NavigationToolbar(self,parent)
        self.tootlbar.hide()
示例#29
0
    def populate(self):
        self.setWindowTitle('Live plotter')
        self.canvas = MplCanvas()
        self.nav = NavigationToolbar(self.canvas, self)
        '''Changed nav toolbar'''
        self.nav.addAction('Reset optimizer', self.reset_opt)

        self.layout = QGridLayout()
        self.layout.setSpacing(0)
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.layout.addWidget(self.nav)
        self.layout.addWidget(self.canvas)

        self.setLayout(self.layout)
        #self.canvas.ax.set_ylim((0, 5e-5))
        #self.canvas.ax.set_xlim((0, .04))
        width = self.canvas.width()
        height = self.nav.height() + self.canvas.height() + 20
        self.setFixedSize(width, height)
示例#30
0
    def init_commandlayout(self) -> None:
        self.commandLayout = QVBoxLayout()

        fig = Figure(figsize=(4, 3), dpi=100)
        self.contrast_fc = FigureCanvas(fig)
        self.contrast_ax = self.contrast_fc.figure.add_subplot(111)
        self.contrast_fc.draw()
        nav = NavigationToolbar2QT(self.contrast_fc, self)
        nav.setStyleSheet("QToolBar { border: 0px }")

        self.commandLayout.addWidget(self.contrast_fc)
        self.commandLayout.addWidget(nav)

        self.contrastTable = QTableWidget()
        self.contrastTable.setSelectionBehavior(QTableView.SelectRows)
        self.contrastTable.horizontalHeader().setDefaultSectionSize(90)
        self.contrastTable.verticalHeader().setDefaultSectionSize(30)

        self.commandLayout.addWidget(self.contrastTable)
        self.mainlayout.addLayout(self.commandLayout)
    def __init__(self, parent=None):
        super(MplGraphQt5Widget, self).__init__(parent)

        self.width = 3
        self.height = 3
        self.dpi = 100

        self._dataY = np.array([])
        self._dataX = np.array([])

        self._spCols = 1
        self._spRows = 1
        self.all_sp_axes = []
        self.fig = Figure(figsize=(self.width, self.height), dpi=self.dpi)
        self.all_sp_axes.append(self.fig.add_subplot(self._spCols, self._spRows, 1))
        self.fig.set_frameon(False)
        self.fig.set_tight_layout(True)

        self.canvas = Canvas(self.fig)

        self._navBarOn = False
        self.mpl_toolbar = NavigationToolbar(self.canvas, parent)
        self.mpl_toolbar.dynamic_update()

        self.canvas.mpl_connect('key_press_event', self.on_key_press)
        self.canvas.mpl_connect('button_press_event', self.on_button_press)
        self.canvas.mpl_connect('motion_notify_event', self.on_mouse_move)
        self.canvas.setFocusPolicy(Qt.ClickFocus)
        self.canvas.setFocus()

        self.canvas.setParent(parent)
        self.canvas.clearMask()
        self.canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.canvas.updateGeometry()

        vbox = QVBoxLayout()
        vbox.addWidget(self.canvas)
        vbox.addWidget(self.mpl_toolbar)
        if not self._navBarOn:
            self.mpl_toolbar.hide()
        self.setLayout(vbox)
    def create_main_frame(self):
        self.main_frame = QtWidgets.QWidget()
        
        # Create the mpl Figure and FigCanvas objects
        self.dpi = 100
        
        self.fig = Figure((10.0, 10.0), dpi=self.dpi, facecolor='White')        

        self.canvas = FigureCanvas(self.fig)
        self.canvas.setParent(self.main_frame)       
        
        # Create the navigation toolbar, tied to the canvas
        self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame)

        save_button = QtWidgets.QPushButton()
        save_button.clicked.connect(self.save_production_data)
        save_button.setIcon(QtGui.QIcon(":save.png"))
        save_button.setToolTip("Save production data")
        save_button.setStatusTip("Save production data")
        
        show_button = QtWidgets.QPushButton()
        show_button.clicked.connect(self.plot_settings_view)
        show_button.setIcon(QtGui.QIcon(":gear.png"))
        show_button.setToolTip("Edit settings")
        show_button.setStatusTip("Edit settings")

        buttonbox0 = QtWidgets.QDialogButtonBox()
        buttonbox0.addButton(save_button, QtWidgets.QDialogButtonBox.ActionRole)
        buttonbox0.addButton(show_button, QtWidgets.QDialogButtonBox.ActionRole)

        self.mpl_toolbar.addWidget(buttonbox0)                      
                                
        vbox = QtWidgets.QVBoxLayout()        
        vbox.addWidget(self.mpl_toolbar)
        vbox.addWidget(self.canvas)
        
        self.main_frame.setLayout(vbox)
        self.setCentralWidget(self.main_frame)
        
        self.status_text = QtWidgets.QLabel("")        
        self.statusBar().addWidget(self.status_text,1)
    def __init__(self, figures, fig_no=0):
        super().__init__()
        self.setWindowTitle("Plot")

        self.figures = figures
        self.fig_no = fig_no

        self.left_v_widget = QWidget(self)
        self.left_v_box = QtWidgets.QVBoxLayout(self.left_v_widget)
        self.left_v_box.setContentsMargins(0, 0, 0, 0)

        self.right_v_widget = QWidget(self)
        self.right_v_box = QtWidgets.QVBoxLayout(self.right_v_widget)
        self.right_v_box.setContentsMargins(4, 0, 10, 0)

        self.canvas = Canvas(self.left_v_widget, figures[fig_no])
        self.nav = NavigationToolbar2QT(self.canvas, self.left_v_widget)

        self.left_v_box.addWidget(self.nav)
        self.left_v_box.addWidget(self.canvas)

        self.button_time = QtWidgets.QPushButton(self.right_v_widget)
        self.button_time.setText("Time Domain")
        self.button_time.clicked.connect(self.change_to_time)

        self.button_frequency = QtWidgets.QPushButton(self.right_v_widget)
        self.button_frequency.setText("Frequency Domain")
        self.button_frequency.clicked.connect(self.change_to_frequency)

        self.right_v_box.addStretch()
        self.right_v_box.addWidget(self.button_time)
        self.right_v_box.addStretch()
        self.right_v_box.addWidget(self.button_frequency)
        self.right_v_box.addStretch()

        self.layout = QtWidgets.QHBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.addWidget(self.left_v_widget)
        self.layout.addWidget(self.right_v_widget)
        self.setLayout(self.layout)
        self.setMinimumSize(self.width(), self.height())
    def populate(self):
        self.setWindowTitle(self.name)
        self.canvas = MplCanvas()

        self.nav = NavigationToolbar(self.canvas, self)
        #select_cam = self.nav.addAction('&Select camera')
        #select_cam.addAction('horizontal mot')
        #select_cam.addAction('vertical mot (cavity)')
        self.nav.addAction('Launch live plotter', self.launch_plotter)

        self.layout = QGridLayout()
        self.layout.setSpacing(0)
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.layout.addWidget(self.nav)
        self.layout.addWidget(self.canvas)

        self.setLayout(self.layout)
        width = self.canvas.width()
        height = self.nav.height() + self.canvas.height()
        self.setFixedSize(width, height)
示例#35
0
    def __init__(self):
        super(MatplotlibPopupWindow, self).__init__()
        
        self.main_widget = QtWidgets.QWidget()
        self.setCentralWidget(self.main_widget)
        
        
        
        # Init the matplotlib canvas
        self.canvas = FigureCanvas(Figure(facecolor='#efebe7'))
        self.canvas.axes = self.canvas.figure.add_subplot(111)
        


        # Create toolbar, passing canvas as first parament, parent (self, the MainWindow) as second.
        toolbar = NavigationToolbar2QT(self.canvas, self)

        # Compose elements into layout
        layout = QVBoxLayout(self.main_widget)
        layout.addWidget(toolbar)
        layout.addWidget(self.canvas)
示例#36
0
    def populate(self):
        self.setWindowTitle("Clock + cavity gui")
        self.canvas = MplCanvas()

        self.nav = NavigationToolbar(self.canvas, self)
        #self.nav.addAction('Select analysis method')
        #self.nav.addAction('Launch live plotter', self.launch_plotter)

        self.layout = QGridLayout()
        self.layout.setSpacing(0)
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.layout.addWidget(self.nav)
        self.layout.addWidget(self.canvas)

        self.setLayout(self.layout)
        width = self.canvas.width()
        height = self.nav.height() + self.canvas.height()
        self.setFixedSize(width, height)

        self.add_subplot_buttons()
    def __init__(self):
        super().__init__()
        self.observable_net = self.grad_displays = \
            self.weight_displays = self.weights = self.gradients = self.displays = None

        self.l1_from = self.l1_to = self.l2_from = self.l2_to = self.step = self.adjust_value = \
            self.grad_vectors = self.weight_vectors = None

        self.layer = 0
        self.epochs = 10
        self.delete_x = 0
        self.delete_y = 0
        self.initialize_observable_net()
        self.ad_value = None
        self.vis = 'gradient'

        self.figure = Figure()
        self.canvas = FigureCanvasQTAgg(self.figure)
        self.toolbar = NavigationToolbar2QT(self.canvas, self)
        self.init_ui()
        self.update_texts()
示例#38
0
    def __createFigure(self):  ##创建绘图系统
        self.__fig = mpl.figure.Figure(figsize=(8, 5))  #单位英寸
        figCanvas = FigureCanvas(self.__fig)  #创建FigureCanvas对象,必须传递一个Figure对象
        self.__naviBar = NavigationToolbar(figCanvas,
                                           self)  #创建NavigationToolbar工具栏

        actList = self.__naviBar.actions()  #关联的Action列表
        for act in actList:  #获得每个Action的标题和tooltip,可注释掉
            print("text=%s,\ttoolTip=%s" % (act.text(), act.toolTip()))
        self.__changeActionLanguage()  #改工具栏的语言为汉语
        ##工具栏改造
        actList[6].setVisible(False)  #隐藏Subplots 按钮
        actList[7].setVisible(False)  #隐藏Customize按钮
        act8 = actList[8]  #分隔条
        self.__naviBar.insertAction(act8, self.ui.actTightLayout)  #"紧凑布局"按钮
        self.__naviBar.insertAction(act8, self.ui.actSetCursor)  #"十字光标"按钮

        count = len(actList)  #Action的个数
        lastAction = actList[count - 1]  #最后一个Action
        self.__naviBar.insertAction(lastAction,
                                    self.ui.actScatterAgain)  #"重绘散点"按钮

        lastAction.setVisible(False)  #隐藏其原有的坐标提示
        self.__naviBar.addSeparator()
        self.__naviBar.addAction(self.ui.actQuit)  #"退出"按钮
        self.__naviBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)  #显示方式

        self.addToolBar(self.__naviBar)  #添加作为主窗口工具栏
        self.setCentralWidget(figCanvas)

        figCanvas.setCursor(Qt.CrossCursor)
        ## 必须保留变量cid,否则可能被垃圾回收
        self._cid1 = figCanvas.mpl_connect("motion_notify_event",
                                           self.do_canvas_mouseMove)
        self._cid2 = figCanvas.mpl_connect("axes_enter_event",
                                           self.do_axes_mouseEnter)
        self._cid3 = figCanvas.mpl_connect("axes_leave_event",
                                           self.do_axes_mouseLeave)
        self._cid4 = figCanvas.mpl_connect("pick_event", self.do_series_pick)
        self._cid5 = figCanvas.mpl_connect("scroll_event", self.do_scrollZoom)
示例#39
0
    def __init__(self, parent):
        super().__init__(parent)
        self.parent = parent

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setWindowTitle('Graph Window')

        vbl = QtWidgets.QVBoxLayout(self)  # self is where layout is assigned
        hbl = QtWidgets.QHBoxLayout()
        self.mmc = MyMplCanvas(self)
        mpl_toolbar = NavigationToolbar2QT(self.mmc, self.parent)

        self.combobox1 = QtWidgets.QComboBox()
        self.combobox2 = QtWidgets.QComboBox()
        self.spinbox = QtWidgets.QSpinBox()
        self.label1 = QtWidgets.QLabel('Bands:')
        self.label2 = QtWidgets.QLabel('Bands:')
        self.label3 = QtWidgets.QLabel('Value:')
        self.checkbox = QtWidgets.QCheckBox('Option:')

        self.checkbox.hide()

        hbl.addWidget(self.label1)
        hbl.addWidget(self.combobox1)
        hbl.addWidget(self.label2)
        hbl.addWidget(self.combobox2)
        hbl.addWidget(self.label3)
        hbl.addWidget(self.spinbox)

        vbl.addWidget(self.mmc)
        vbl.addWidget(mpl_toolbar)
        vbl.addWidget(self.checkbox)
        vbl.addLayout(hbl)

        self.setFocus()

        self.combobox1.currentIndexChanged.connect(self.change_band)
        self.combobox2.currentIndexChanged.connect(self.change_band)
        self.spinbox.valueChanged.connect(self.change_band)
        self.checkbox.stateChanged.connect(self.change_band)
示例#40
0
    def __init__(self):

        QMainWindow.__init__(self)

        menubar = self.menuBar()
        filemenu = menubar.addMenu("File")

        file_loader_widget = FileLoaderWidget(self)
        file_loader_presenter = file_loader_widget.get_presenter()
        filemenu.addAction(file_loader_widget)

        preview_widget = PreviewWidget()
        preview_presenter = preview_widget.get_presenter()

        plot_widget = PlotWidget()
        plot_presenter = plot_widget.get_presenter()
        self.toolbar = NavigationToolbar(plot_widget, self)
        self.addToolBar(self.toolbar)

        MainViewPresenter(self, file_loader_presenter, preview_presenter,
                          plot_presenter)

        # Action for exiting the program
        exitAct = QAction("Exit", self)
        exitAct.triggered.connect(self.close)
        filemenu.addAction(exitAct)

        self.statusBar()

        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)

        gridLayout = QGridLayout()
        centralWidget.setLayout(gridLayout)

        gridLayout.addWidget(preview_widget, 0, 0)
        gridLayout.addWidget(plot_widget, 0, 1)

        self.setWindowTitle("Dataset Viewer")
        self.show()
示例#41
0
    def setupui(self):
        """ Setup UI """
        hbl_all = QtWidgets.QHBoxLayout(self)
        mpl_toolbar = NavigationToolbar2QT(self.mmc, self)
        vbl_raster = QtWidgets.QVBoxLayout()
        label2 = QtWidgets.QLabel()
        label3 = QtWidgets.QLabel()

        self.dsb_dist.setDecimals(4)
        self.dsb_dist.setMinimum(0.0001)
        self.dsb_dist.setSingleStep(0.0001)
        self.dsb_dist.setProperty("value", 0.001)

        self.radio_geog.setChecked(True)

        spacer = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum,
                                       QtWidgets.QSizePolicy.Expanding)

        self.setWindowTitle("Fault Plane Solution (FPS)")
        label2.setText('FPS Algorithm:')
        label3.setText('Width Scale Factor:')
        self.btn_saveshp.setText('Save Shapefile')

        vbl_raster.addWidget(label2)
        vbl_raster.addWidget(self.cbox_alg)
        vbl_raster.addWidget(label3)
        vbl_raster.addWidget(self.dsb_dist)
        vbl_raster.addWidget(self.radio_geog)
        vbl_raster.addWidget(self.radio_proj)
        vbl_raster.addItem(spacer)
        vbl_raster.addWidget(self.btn_saveshp)
        vbl_right = QtWidgets.QVBoxLayout()
        vbl_right.addWidget(self.mmc)
        vbl_right.addWidget(mpl_toolbar)
        hbl_all.addLayout(vbl_raster)
        hbl_all.addLayout(vbl_right)

        self.btn_saveshp.clicked.connect(self.save_shp)
        self.dsb_dist.valueChanged.connect(self.change_alg)
        self.radio_geog.toggled.connect(self.change_alg)
示例#42
0
    def create_widget_plot(self):
        self.widget_plot = QWidget(self)
        self.vbox_plot = QVBoxLayout()
        self.hbox_plot = QHBoxLayout()

        self.fig_plot = Figure(figsize=(9, 6), dpi=65)
        self.fig_plot.patch.set_color('w')
        self.ax_plot = self.fig_plot.add_axes([0, 0, 1, 1],
                                              axisbg=(0.6, 0.7, 0.8))
        self.canvas_plot = FigureCanvas(self.fig_plot)
        self.canvas_plot.setParent(self.widget_plot)
        self.canvas_plot.show()
        self.mpl_toolbar = NavigationToolbar(self.canvas_plot,
                                             self.widget_plot)
        self.mpl_toolbar.setStyleSheet("border:none;background-color:#efefef")

        self.ch_color = ['y', 'b', 'r', 'g']
        self.ch1_label = QLabel('CH1')
        self.ch2_label = QLabel('CH2')
        self.ch3_label = QLabel('CH3')
        self.ch4_label = QLabel('CH4')
        self.ch_label_group = [
            self.ch1_label, self.ch2_label, self.ch3_label, self.ch4_label
        ]
        for i in self.ch_label_group:
            i.setStyleSheet(
                "color:rgb(100,100,100,250);font-size:15px;font-weight:bold;border:2px solid red;"
            )

        self.hbox_plot.addWidget(self.ch1_label)
        self.hbox_plot.addStretch(1)
        self.hbox_plot.addWidget(self.ch2_label)
        self.hbox_plot.addStretch(1)
        self.hbox_plot.addWidget(self.ch3_label)
        self.hbox_plot.addStretch(1)
        self.hbox_plot.addWidget(self.ch4_label)
        self.vbox_plot.addWidget(self.canvas_plot)
        self.vbox_plot.addWidget(self.mpl_toolbar)
        self.vbox_plot.addLayout(self.hbox_plot)
        self.widget_plot.setLayout(self.vbox_plot)
示例#43
0
文件: PlotWidget.py 项目: IENT/RDPlot
    def __init__(self, ):
        super(PlotWidget, self).__init__()
        self.setupUi(self)
        self.fig_dict = {}

        # store copies of call backs, so that they are not garbage collected
        self.on_wheel_cpy = self.on_wheel
        self.on_db_click_cpy = self.on_db_click

        # set figure and background to transparent
        self.plotAreaWidget.fig = Figure(facecolor="white")
        self.plotAreaWidget.fig.set_tight_layout(True)

        # set some properties for canvas
        self.plotAreaWidget.canvas = FigureCanvas(self.plotAreaWidget.fig)
        self.splitter.setSizes([680, 50])

        self.ax = self.plotAreaWidget.fig.add_subplot(111)
        self.ax.grid(True)

        # connect scroll and double click event to canvas
        self.plotAreaWidget.canvas.mpl_connect('scroll_event',
                                               self.on_wheel_cpy)
        self.plotAreaWidget.canvas.mpl_connect('button_press_event',
                                               self.on_db_click_cpy)

        self.verticalLayout_3.addWidget(self.plotAreaWidget.canvas)
        # add the toolbar for the plot
        self.toolbar = NavigationToolbar(self.plotAreaWidget.canvas,
                                         self.plotAreaWidget,
                                         coordinates=True)
        self.toolbar.pan()
        self.verticalLayout_3.addWidget(self.toolbar)

        self.label_warning.hide()

        # Anchor identifier for ci plots
        self.anchor_identifier = ''
        self.ci_mode = 'average'
示例#44
0
    def stack1UI(self): #THE PLOTTING CAPABILITY
        
        #figure painting from matplot
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)

        #toolbar addition
        self.toolbar = NavigationToolbar(self.canvas, self)
        self.toolbar.show()

        #some buttons for functionality
        self.button = QtWidgets.QPushButton('ReadPlot')
        self.button.clicked.connect(self.readplot)
        self.button2 = QtWidgets.QPushButton('ClearPlot')
        self.button2.clicked.connect(self.clearplot)
        
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.toolbar)
        layout.addWidget(self.canvas)
        layout.addWidget(self.button)
        layout.addWidget(self.button2)
        self.stack1.setLayout(layout)
示例#45
0
    def __init__(self, parent, plot_name):
        super().__init__(parent)
        self.plot_name = plot_name
        self.plot_manager = PlotManager.instance

        self.plot_thread = None

        self.figure = Figure(figsize=(18, 12))
        # self.figure.subplots_adjust(left=0.1, right=0.9,
        #                             bottom=0.1, top=0.9,
        #                             hspace=0.3, wspace=0.3)

        self.canvas = FigureCanvas(self.figure)

        self.toolbar = NavigationToolbar(self.canvas, self)

        main_layout = QtWidgets.QVBoxLayout(self)
        main_layout.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft)
        main_layout.setContentsMargins(0, 0, 0, 0)
        main_layout.setSpacing(0)
        main_layout.addWidget(self.toolbar)
        main_layout.addWidget(self.canvas)
示例#46
0
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.fig_pdynamic = Figure()
        self.fig_pdynamic.set_facecolor('#ffffff')
        self.canvas_pdynamic = FigureCanvas(self.fig_pdynamic)
        vertical_layout = QVBoxLayout()
        vertical_layout.addWidget(self.canvas_pdynamic)
        self.canvas_pdynamic.axes_pdynamic = self.canvas_pdynamic.figure.add_subplot(
            111)
        self.setLayout(vertical_layout)

        self.canvas_pdynamic.axes_pdynamic.set_xticks([])
        self.canvas_pdynamic.axes_pdynamic.set_yticks([])
        self.canvas_pdynamic.axes_pdynamic.axis('off')
        self.fig_pdynamic.subplots_adjust(left=0.12,
                                          bottom=0.15,
                                          right=0.985,
                                          top=0.95)
        self.toolbar = NavigationToolbar(self.canvas_pdynamic, self)
        self.toolbar.setFixedHeight(25)
        vertical_layout.addWidget(self.toolbar)
    def __init__(self, figure, identifier, filepath):
        self.identifier = identifier
        loader = UiLoader()
        self.ui = loader.load(os.path.join(LYSE_DIR, 'plot_window.ui'),
                              PlotWindow())

        # Tell Windows how to handle our windows in the the taskbar, making pinning work properly and stuff:
        if os.name == 'nt':
            self.ui.newWindow.connect(set_win_appusermodel)

        self.set_window_title(identifier, filepath)

        # figure.tight_layout()
        self.figure = figure
        self.canvas = figure.canvas
        self.navigation_toolbar = NavigationToolbar(self.canvas, self.ui)

        self.lock_action = self.navigation_toolbar.addAction(
            QtGui.QIcon(':qtutils/fugue/lock-unlock'), 'Lock axes',
            self.on_lock_axes_triggered)
        self.lock_action.setCheckable(True)
        self.lock_action.setToolTip('Lock axes')

        self.copy_to_clipboard_action = self.navigation_toolbar.addAction(
            QtGui.QIcon(':qtutils/fugue/clipboard--arrow'),
            'Copy to clipboard', self.on_copy_to_clipboard_triggered)
        self.copy_to_clipboard_action.setToolTip('Copy to clipboard')
        self.copy_to_clipboard_action.setShortcut(QtGui.QKeySequence.Copy)

        self.ui.verticalLayout_canvas.addWidget(self.canvas)
        self.ui.verticalLayout_navigation_toolbar.addWidget(
            self.navigation_toolbar)

        self.lock_axes = False
        self.axis_limits = None

        self.update_window_size()

        self.ui.show()
示例#48
0
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent=None)
        self.parent = parent

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setWindowTitle("Graph Window")

        vbl = QtWidgets.QVBoxLayout(self)  # self is where layout is assigned
        self.hbl = QtWidgets.QHBoxLayout()
        self.mmc = MyMplCanvas(self)
        mpl_toolbar = NavigationToolbar2QT(self.mmc, self.parent)

        self.combobox1 = QtWidgets.QComboBox()
        self.combobox2 = QtWidgets.QComboBox()
        self.spinbox = QtWidgets.QSpinBox()
        self.label1 = QtWidgets.QLabel()
        self.label2 = QtWidgets.QLabel()
        self.label3 = QtWidgets.QLabel()

        self.label1.setText('Bands:')
        self.label2.setText('Bands:')
        self.label3.setText('Value:')

        self.hbl.addWidget(self.label1)
        self.hbl.addWidget(self.combobox1)
        self.hbl.addWidget(self.label2)
        self.hbl.addWidget(self.combobox2)
        self.hbl.addWidget(self.label3)
        self.hbl.addWidget(self.spinbox)

        vbl.addWidget(self.mmc)
        vbl.addWidget(mpl_toolbar)
        vbl.addLayout(self.hbl)

        self.setFocus()

        self.combobox1.currentIndexChanged.connect(self.change_band)
        self.combobox2.currentIndexChanged.connect(self.change_band)
        self.spinbox.valueChanged.connect(self.change_band)
示例#49
0
    def __init__(self, parent=None):
        super().__init__(parent)

        self.settings = QSettings()
        self.settings.beginGroup("plot_display")

        # initialise canvas/figure/axes according to
        # https://matplotlib.org/examples/user_interfaces/embedding_in_qt5.html
        self.fig = Figure(figsize=(10, 10),
                          facecolor=(1, 1, 1),
                          edgecolor=(0, 0, 0))
        self.ax = self.fig.add_axes((0, 0, 1, 1))
        self.ax.tick_params(pad=-5)
        self.canvas = FigureCanvas(self.fig)
        self.canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.canvas.updateGeometry()
        self.toolbar = NavigationToolbar(self.canvas, self)

        # plot params
        self._vector_data = vpype.VectorData()
        self._page_format = (100, 100)  # in pixels
        self._init_lims = True
        self._layers = {}

        # settings
        self._unit: str = self.settings.value("unit", "cm")
        self._colorful: bool = self.settings.value("colorful", False)
        self._show_points: bool = self.settings.value("show_points", False)
        self._show_pen_up: bool = self.settings.value("show_pen_up", False)
        self._show_axes: bool = self.settings.value("show_axes", False)
        self._show_grid: bool = self.settings.value("show_grid", False)

        # setup layout
        layout = QVBoxLayout()
        layout.setMargin(0)
        layout.setSpacing(0)
        layout.addWidget(self.canvas)
        layout.addWidget(self.toolbar)
        self.setLayout(layout)
示例#50
0
    def create_main_frame(self, two_axes=False):
        self.main_frame = QtWidgets.QWidget()

        # Create the mpl Figure and FigCanvas objects
        self.dpi = 100
        self.fig = Figure((10.0, 10.0), dpi=self.dpi, facecolor='White')
        self.canvas = FigureCanvas(self.fig)
        self.canvas.setParent(self.main_frame)

        self.axes = self.fig.add_subplot(111, facecolor='White')

        if two_axes:
            self.axes2 = self.axes.twinx()

        # Create the navigation toolbar, tied to the canvas
        self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame)

        # Other GUI controls
        show_button = QtWidgets.QPushButton()
        show_button.clicked.connect(self.plot_settings_view)
        show_button.setIcon(QtGui.QIcon(":gear.png"))
        show_button.setToolTip(self.tr("Plot settings"))
        show_button.setStatusTip(self.tr("Plot settings"))

        buttonbox0 = QtWidgets.QDialogButtonBox()
        buttonbox0.addButton(show_button,
                             QtWidgets.QDialogButtonBox.ActionRole)

        self.mpl_toolbar.addWidget(show_button)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.mpl_toolbar)
        vbox.addWidget(self.canvas)

        self.main_frame.setLayout(vbox)
        self.setCentralWidget(self.main_frame)

        self.status_text = QtWidgets.QLabel("")
        self.statusBar().addWidget(self.status_text, 1)
示例#51
0
    def __init__(self, redraw):
        super(PlotCanvas, self).__init__()

        layout = QtWidgets.QGridLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        self.setLayout(layout)

        figure = Figure()
        canvas = FigureCanvasQTAgg(figure)
        canvas.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(canvas, 1, 1, 1, 1)
        self._canvas = canvas

        toolbar = NavigationToolbar2QT(canvas, self)
        layout.addWidget(toolbar, 2, 1, 1, 1)

        plot = figure.add_subplot(111, projection='3d')
        # plot.set_aspect('equal')
        self._plot = plot

        self._redraw.connect(redraw)
    def create_main_frame(self,two_axes=False):
        self.main_frame = QtWidgets.QWidget()
        
        # Create the mpl Figure and FigCanvas objects
        self.dpi = 100
        self.fig = Figure((10.0, 10.0), dpi=self.dpi, facecolor='White')
        self.canvas = FigureCanvas(self.fig)
        self.canvas.setParent(self.main_frame)
        
        self.axes = self.fig.add_subplot(111, facecolor='White')
        
        if two_axes:
            self.axes2 = self.axes.twinx()        
 
        # Create the navigation toolbar, tied to the canvas
        self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame)
        
        # Other GUI controls               
        show_button = QtWidgets.QPushButton()
        show_button.clicked.connect(self.plot_settings_view)
        show_button.setIcon(QtGui.QIcon(":gear.png"))
        show_button.setToolTip(self.tr("Plot settings"))
        show_button.setStatusTip(self.tr("Plot settings"))

        buttonbox0 = QtWidgets.QDialogButtonBox()
        buttonbox0.addButton(show_button, QtWidgets.QDialogButtonBox.ActionRole)               

        self.mpl_toolbar.addWidget(show_button)                      
                                
        vbox = QtWidgets.QVBoxLayout()        
        vbox.addWidget(self.mpl_toolbar)
        vbox.addWidget(self.canvas)
        
        self.main_frame.setLayout(vbox)
        self.setCentralWidget(self.main_frame)
        
        self.status_text = QtWidgets.QLabel("")        
        self.statusBar().addWidget(self.status_text,1)       
示例#53
0
    def __init__(self, 
                 figure, 
                 out_dir=None,
                 ):
        super().__init__()
        
        #=======================================================================
        # defauklts
        #=======================================================================
        if out_dir is None: out_dir = os.getcwd()
        
        
        #update defaults

        if not os.path.exists(out_dir):os.makedirs(out_dir)
        matplotlib.rcParams['savefig.directory'] = out_dir
        
        #styleize window
        self.setWindowTitle('CanFlood %s'%(figure._suptitle.get_text()[:15]))
        
        #=======================================================================
        # setup window
        #=======================================================================
        #add the main widget
        self._main = QtWidgets.QWidget()
        self.setCentralWidget(self._main)
        
        #build a la yout
        layout = QtWidgets.QVBoxLayout(self._main)

        #build/add canvas to layout
        canvas = FigureCanvas(figure)
        layout.addWidget(canvas)
        
        #build/add toolbar
        self._toolbar = NavigationToolbar2QT(canvas, self)
                
        self.addToolBar(self._toolbar)
示例#54
0
    def __init__(self, canvas: FigureCanvasQTAgg):
        super().__init__()
        self.layout = QVBoxLayout(self)
        self.setLayout(self.layout)

        self.canvas = canvas
        self.canvas.setParent(self)
        self.canvas.setFocusPolicy(Qt.StrongFocus)
        self.canvas.setFocus()
        self.layout.addWidget(self.canvas)

        self.figure = canvas.figure  # type: Figure

        self.mpl_toolbar = NavigationToolbar(self.canvas, self)
        self.layout.addWidget(self.mpl_toolbar)

        def sizeHint():
            size = super(NavigationToolbar, self.mpl_toolbar).sizeHint()
            return size

        self.mpl_toolbar.sizeHint = sizeHint
        self.mpl_toolbar.layout().setContentsMargins(0, 0, 0, 0)
        self.mpl_toolbar.setIconSize(QSize(16, 16))
        self.mpl_toolbar.layout().setSpacing(2)
        self.layout.setContentsMargins(0, 0, 0, 0)

        # self.mpl_toolbar.setHeight(20)
        self.canvas.mpl_connect('key_press_event', self.on_key_press)
        self.canvas.mpl_connect('scroll_event', self.on_scroll)
        self.canvas.mpl_connect('key_release_event', self.on_key_release)
        self.mpl_toolbar.pan()  # we usually want to pan with mouse, since zooming is on the scroll

        self.current_modifiers = set()
        self.restored_axes = set()

        self.axes_state_to_restore = []
        self.figure.add_axobserver(lambda figure: self._restore_existing_axes())
        self.setMinimumSize(200, 200)
示例#55
0
 def setupUi(self, Form):
     Ui_gmx_extract_energy.setupUi(self, Form)
     Form.fsmodel = QtWidgets.QFileSystemModel()
     Form.treeViewOpenFile.setModel(Form.fsmodel)
     Form.fsmodel.setNameFilters(['*.edr'])
     Form.fsmodel.setRootPath('/')
     Form.treeViewOpenFile.hideColumn(1)
     Form.treeViewOpenFile.hideColumn(2)
     Form.treeViewOpenFile.hideColumn(3)
     Form.fsmodel.sort(0, QtCore.Qt.AscendingOrder)
     Form.treeViewOpenFile.expand(Form.fsmodel.index(os.getcwd()))
     Form.treeViewOpenFile.setCurrentIndex(Form.fsmodel.index(os.getcwd()))
     Form.treeViewOpenFile.scrollTo(Form.fsmodel.index(os.getcwd()), QtWidgets.QAbstractItemView.PositionAtTop)
     Form.treeViewOpenFile.activated.connect(Form.onFileSelected)
     Form.figure = Figure()
     Form.figureCanvas = FigureCanvasQTAgg(Form.figure)
     Form.verticalLayoutFigure.addWidget(Form.figureCanvas)
     Form.navigationToolBar = NavigationToolbar2QT(Form.figureCanvas, Form)
     Form.verticalLayoutFigure.addWidget(Form.navigationToolBar)
     Form.hideAllPushButton.clicked.connect(Form.hideAll)
     Form.toolButtonGoFirst.clicked.connect(
         lambda: Form.horizontalSliderCursor.triggerAction(Form.horizontalSliderCursor.SliderToMinimum))
     Form.toolButtonGoLast.clicked.connect(
         lambda: Form.horizontalSliderCursor.triggerAction(Form.horizontalSliderCursor.SliderToMaximum))
     Form.toolButtonGoNext.clicked.connect(
         lambda: Form.horizontalSliderCursor.triggerAction(Form.horizontalSliderCursor.SliderSingleStepAdd))
     Form.toolButtonGoPrevious.clicked.connect(
         lambda: Form.horizontalSliderCursor.triggerAction(Form.horizontalSliderCursor.SliderSingleStepSub))
     Form.tminSlider.valueChanged.connect(Form.onTminSliderValueChanged)
     Form.tmaxSlider.valueChanged.connect(Form.onTmaxSliderValueChanged)
     Form.smoothingSlider.valueChanged.connect(Form.onSmoothingChanged)
     index = 0
     for i, w in enumerate(sorted(self.windowfunctions)):
         Form.smoothingFunctionComboBox.addItem(self.windowfunctions[w])
         if w == 'boxcar':
             index = i
     Form.smoothingFunctionComboBox.setCurrentIndex(index)
     Form.smoothingFunctionComboBox.currentIndexChanged.connect(lambda *args: self.replot())
示例#56
0
    def __init__(self, parent: Any):
        super(CreateFigure, self).__init__()
        self.parent = parent
        self.hbox = QHBoxLayout(self)

        lwidget, lvbox = QWidget(), QVBoxLayout()

        self.list_widget = QListWidget()
        self.update_list()
        self.list_widget.itemClicked.connect(self.plot_figure_clicked)

        lvbox.addWidget(self.list_widget)
        lwidget.setLayout(lvbox)
        self.hbox.addWidget(lwidget)

        self.figure = FigureCanvas(width=5, height=4, dpi=100)
        toolbar = NavigationToolbar2QT(self.figure, self, coordinates=False)
        rwidget, rvbox = QWidget(), QVBoxLayout()
        rvbox.addWidget(toolbar)
        rvbox.addWidget(self.figure)
        rwidget.setLayout(rvbox)

        self.hbox.addWidget(rwidget)
示例#57
0
    def __init__(self):
        super().__init__()
        self.left = 10
        self.top = 10
        self.title = 'XRD data processing'
        self.width = 720
        self.height = 540

        self.button1 = QPushButton('Open file', self)
        self.label1 = QLabel('', self)
        self.label2 = QLabel('Specify theta', self)
        self.kanal = QLineEdit('', self)
        self.button2 = QPushButton('Next', self)

        self.hboxLayout = QHBoxLayout(self)

        self.m = PlotCanvas(self, width=6.9, height=4.5)
        self.m.move(15, 40)
        self.tools = NavigationToolbar(self.m, self)
        self.tools.move(15, 500)
        self.tools.resize(400, 30)

        self.initUI()
示例#58
0
    def __init__(self):
        super().__init__()
        # set initial window shape
        self.setWindowTitle("Function plotter")
        self.setGeometry(300, 400, 600, 600)

        # create initial figure and toolbar for the plotter
        self.canvas = MplCanvas(self, 5, 4, 100)
        self.toolbar = NavigationToolbar2QT(self.canvas, self)
        self.createDataGroupBox()  # container for the input data

        # organize the layout of the main parts of the GUI
        grid = QtWidgets.QGridLayout()
        grid.addWidget(self.toolbar, 0, 0)
        grid.addWidget(self.canvas, 1, 0)
        grid.addWidget(self.dataGroupBox, 2, 0)
        widget = QtWidgets.QWidget()
        widget.setLayout(grid)
        self.setCentralWidget(widget)
        self.center()

        # connect signals and slots
        self.pushButton_plot.clicked.connect(self.plotFunction)
示例#59
0
 def __init__(self):
   super(VNA, self).__init__()
   self.setupUi(self)
   # IP address validator
   rx = QRegExp('^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$')
   self.addrValue.setValidator(QRegExpValidator(rx, self.addrValue))
   # state variables
   self.idle = True
   self.reading = False
   # sweep parameters
   self.sweep_start = 100
   self.sweep_stop = 60000
   self.sweep_size = 600
   self.xaxis, self.sweep_step = np.linspace(self.sweep_start, self.sweep_stop, self.sweep_size, retstep = True)
   self.xaxis *= 1000
   # buffer and offset for the incoming samples
   self.buffer = bytearray(24 * VNA.max_size)
   self.offset = 0
   self.data = np.frombuffer(self.buffer, np.complex64)
   self.adc1 = np.zeros(VNA.max_size, np.complex64)
   self.adc2 = np.zeros(VNA.max_size, np.complex64)
   self.dac1 = np.zeros(VNA.max_size, np.complex64)
   self.open = np.zeros(VNA.max_size, np.complex64)
   self.short = np.zeros(VNA.max_size, np.complex64)
   self.load = np.zeros(VNA.max_size, np.complex64)
   self.dut = np.zeros(VNA.max_size, np.complex64)
   self.mode = 'dut'
   # create figure
   self.figure = Figure()
   self.figure.set_facecolor('none')
   self.canvas = FigureCanvas(self.figure)
   self.plotLayout.addWidget(self.canvas)
   # create navigation toolbar
   self.toolbar = NavigationToolbar(self.canvas, self.plotWidget, False)
   # initialize cursor
   self.cursor = None
   # remove subplots action
   actions = self.toolbar.actions()
   self.toolbar.removeAction(actions[7])
   self.plotLayout.addWidget(self.toolbar)
   # create TCP socket
   self.socket = QTcpSocket(self)
   self.socket.connected.connect(self.connected)
   self.socket.readyRead.connect(self.read_data)
   self.socket.error.connect(self.display_error)
   # connect signals from buttons and boxes
   self.sweepFrame.setEnabled(False)
   self.dutSweep.setEnabled(False)
   self.connectButton.clicked.connect(self.start)
   self.writeButton.clicked.connect(self.write_cfg)
   self.readButton.clicked.connect(self.read_cfg)
   self.openSweep.clicked.connect(self.sweep_open)
   self.shortSweep.clicked.connect(self.sweep_short)
   self.loadSweep.clicked.connect(self.sweep_load)
   self.dutSweep.clicked.connect(self.sweep_dut)
   self.csvButton.clicked.connect(self.write_csv)
   self.s1pButton.clicked.connect(self.write_s1p)
   self.s2pButton.clicked.connect(self.write_s2p)
   self.startValue.valueChanged.connect(self.set_start)
   self.stopValue.valueChanged.connect(self.set_stop)
   self.sizeValue.valueChanged.connect(self.set_size)
   self.rateValue.addItems(['500', '100', '50', '10', '5', '1'])
   self.rateValue.lineEdit().setReadOnly(True)
   self.rateValue.lineEdit().setAlignment(Qt.AlignRight)
   for i in range(0, self.rateValue.count()):
     self.rateValue.setItemData(i, Qt.AlignRight, Qt.TextAlignmentRole)
   self.rateValue.currentIndexChanged.connect(self.set_rate)
   self.corrValue.valueChanged.connect(self.set_corr)
   self.levelValue.valueChanged.connect(self.set_level)
   self.openPlot.clicked.connect(self.plot_open)
   self.shortPlot.clicked.connect(self.plot_short)
   self.loadPlot.clicked.connect(self.plot_load)
   self.dutPlot.clicked.connect(self.plot_dut)
   self.smithPlot.clicked.connect(self.plot_smith)
   self.impPlot.clicked.connect(self.plot_imp)
   self.rcPlot.clicked.connect(self.plot_rc)
   self.swrPlot.clicked.connect(self.plot_swr)
   self.rlPlot.clicked.connect(self.plot_rl)
   self.gainPlot.clicked.connect(self.plot_gain)
   # create timer
   self.startTimer = QTimer(self)
   self.startTimer.timeout.connect(self.timeout)
示例#60
0
class VNA(QMainWindow, Ui_VNA):

  max_size = 16384

  def __init__(self):
    super(VNA, self).__init__()
    self.setupUi(self)
    # IP address validator
    rx = QRegExp('^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$')
    self.addrValue.setValidator(QRegExpValidator(rx, self.addrValue))
    # state variables
    self.idle = True
    self.reading = False
    # sweep parameters
    self.sweep_start = 100
    self.sweep_stop = 60000
    self.sweep_size = 600
    self.xaxis, self.sweep_step = np.linspace(self.sweep_start, self.sweep_stop, self.sweep_size, retstep = True)
    self.xaxis *= 1000
    # buffer and offset for the incoming samples
    self.buffer = bytearray(24 * VNA.max_size)
    self.offset = 0
    self.data = np.frombuffer(self.buffer, np.complex64)
    self.adc1 = np.zeros(VNA.max_size, np.complex64)
    self.adc2 = np.zeros(VNA.max_size, np.complex64)
    self.dac1 = np.zeros(VNA.max_size, np.complex64)
    self.open = np.zeros(VNA.max_size, np.complex64)
    self.short = np.zeros(VNA.max_size, np.complex64)
    self.load = np.zeros(VNA.max_size, np.complex64)
    self.dut = np.zeros(VNA.max_size, np.complex64)
    self.mode = 'dut'
    # create figure
    self.figure = Figure()
    self.figure.set_facecolor('none')
    self.canvas = FigureCanvas(self.figure)
    self.plotLayout.addWidget(self.canvas)
    # create navigation toolbar
    self.toolbar = NavigationToolbar(self.canvas, self.plotWidget, False)
    # initialize cursor
    self.cursor = None
    # remove subplots action
    actions = self.toolbar.actions()
    self.toolbar.removeAction(actions[7])
    self.plotLayout.addWidget(self.toolbar)
    # create TCP socket
    self.socket = QTcpSocket(self)
    self.socket.connected.connect(self.connected)
    self.socket.readyRead.connect(self.read_data)
    self.socket.error.connect(self.display_error)
    # connect signals from buttons and boxes
    self.sweepFrame.setEnabled(False)
    self.dutSweep.setEnabled(False)
    self.connectButton.clicked.connect(self.start)
    self.writeButton.clicked.connect(self.write_cfg)
    self.readButton.clicked.connect(self.read_cfg)
    self.openSweep.clicked.connect(self.sweep_open)
    self.shortSweep.clicked.connect(self.sweep_short)
    self.loadSweep.clicked.connect(self.sweep_load)
    self.dutSweep.clicked.connect(self.sweep_dut)
    self.csvButton.clicked.connect(self.write_csv)
    self.s1pButton.clicked.connect(self.write_s1p)
    self.s2pButton.clicked.connect(self.write_s2p)
    self.startValue.valueChanged.connect(self.set_start)
    self.stopValue.valueChanged.connect(self.set_stop)
    self.sizeValue.valueChanged.connect(self.set_size)
    self.rateValue.addItems(['500', '100', '50', '10', '5', '1'])
    self.rateValue.lineEdit().setReadOnly(True)
    self.rateValue.lineEdit().setAlignment(Qt.AlignRight)
    for i in range(0, self.rateValue.count()):
      self.rateValue.setItemData(i, Qt.AlignRight, Qt.TextAlignmentRole)
    self.rateValue.currentIndexChanged.connect(self.set_rate)
    self.corrValue.valueChanged.connect(self.set_corr)
    self.levelValue.valueChanged.connect(self.set_level)
    self.openPlot.clicked.connect(self.plot_open)
    self.shortPlot.clicked.connect(self.plot_short)
    self.loadPlot.clicked.connect(self.plot_load)
    self.dutPlot.clicked.connect(self.plot_dut)
    self.smithPlot.clicked.connect(self.plot_smith)
    self.impPlot.clicked.connect(self.plot_imp)
    self.rcPlot.clicked.connect(self.plot_rc)
    self.swrPlot.clicked.connect(self.plot_swr)
    self.rlPlot.clicked.connect(self.plot_rl)
    self.gainPlot.clicked.connect(self.plot_gain)
    # create timer
    self.startTimer = QTimer(self)
    self.startTimer.timeout.connect(self.timeout)

  def start(self):
    if self.idle:
      self.connectButton.setEnabled(False)
      self.socket.connectToHost(self.addrValue.text(), 1001)
      self.startTimer.start(5000)
    else:
      self.stop()

  def stop(self):
    self.idle = True
    self.socket.abort()
    self.connectButton.setText('Connect')
    self.connectButton.setEnabled(True)
    self.sweepFrame.setEnabled(False)
    self.selectFrame.setEnabled(True)
    self.dutSweep.setEnabled(False)

  def timeout(self):
    self.display_error('timeout')

  def connected(self):
    self.startTimer.stop()
    self.idle = False
    self.set_start(self.startValue.value())
    self.set_stop(self.stopValue.value())
    self.set_size(self.sizeValue.value())
    self.set_rate(self.rateValue.currentIndex())
    self.set_corr(self.corrValue.value())
    self.set_level(self.levelValue.value())
    self.connectButton.setText('Disconnect')
    self.connectButton.setEnabled(True)
    self.sweepFrame.setEnabled(True)
    self.dutSweep.setEnabled(True)

  def read_data(self):
    if not self.reading:
      self.socket.readAll()
      return
    size = self.socket.bytesAvailable()
    self.progress.setValue((self.offset + size) / 24)
    limit = 24 * (self.sweep_size + 1)
    if self.offset + size < limit:
      self.buffer[self.offset:self.offset + size] = self.socket.read(size)
      self.offset += size
    else:
      self.buffer[self.offset:limit] = self.socket.read(limit - self.offset)
      self.adc1 = self.data[0::3]
      self.adc2 = self.data[1::3]
      self.dac1 = self.data[2::3]
      getattr(self, self.mode)[0:self.sweep_size] = self.adc1[1:self.sweep_size + 1] / self.dac1[1:self.sweep_size + 1]
      getattr(self, 'plot_%s' % self.mode)()
      self.reading = False
      self.sweepFrame.setEnabled(True)
      self.selectFrame.setEnabled(True)

  def display_error(self, socketError):
    self.startTimer.stop()
    if socketError == 'timeout':
      QMessageBox.information(self, 'VNA', 'Error: connection timeout.')
    else:
      QMessageBox.information(self, 'VNA', 'Error: %s.' % self.socket.errorString())
    self.stop()

  def set_start(self, value):
    self.sweep_start = value
    self.xaxis, self.sweep_step = np.linspace(self.sweep_start, self.sweep_stop, self.sweep_size, retstep = True)
    self.xaxis *= 1000
    if self.idle: return
    self.socket.write(struct.pack('<I', 0<<28 | int(value * 1000)))

  def set_stop(self, value):
    self.sweep_stop = value
    self.xaxis, self.sweep_step = np.linspace(self.sweep_start, self.sweep_stop, self.sweep_size, retstep = True)
    self.xaxis *= 1000
    if self.idle: return
    self.socket.write(struct.pack('<I', 1<<28 | int(value * 1000)))

  def set_size(self, value):
    self.sweep_size = value
    self.xaxis, self.sweep_step = np.linspace(self.sweep_start, self.sweep_stop, self.sweep_size, retstep = True)
    self.xaxis *= 1000
    if self.idle: return
    self.socket.write(struct.pack('<I', 2<<28 | int(value)))

  def set_rate(self, value):
    if self.idle: return
    rate = [1, 5, 10, 50, 100, 500][value]
    self.socket.write(struct.pack('<I', 3<<28 | int(rate)))

  def set_corr(self, value):
    if self.idle: return
    self.socket.write(struct.pack('<I', 4<<28 | int(value)))

  def set_level(self, value):
    if self.idle: return
    self.socket.write(struct.pack('<I', 5<<28 | int(32767 * np.power(10.0, value / 20.0))))

  def sweep(self):
    if self.idle: return
    self.sweepFrame.setEnabled(False)
    self.selectFrame.setEnabled(False)
    self.socket.write(struct.pack('<I', 6<<28))
    self.offset = 0
    self.reading = True
    self.progress = QProgressDialog('Sweep status', 'Cancel', 0, self.sweep_size + 1)
    self.progress.setModal(True)
    self.progress.setMinimumDuration(1000)
    self.progress.canceled.connect(self.cancel)

  def cancel(self):
    self.offset = 0
    self.reading = False
    self.socket.write(struct.pack('<I', 7<<28))
    self.sweepFrame.setEnabled(True)
    self.selectFrame.setEnabled(True)

  def sweep_open(self):
    self.mode = 'open'
    self.sweep()

  def sweep_short(self):
    self.mode = 'short'
    self.sweep()

  def sweep_load(self):
    self.mode = 'load'
    self.sweep()

  def sweep_dut(self):
    self.mode = 'dut'
    self.sweep()

  def gain(self):
    size = self.sweep_size
    return self.dut[0:size]/self.short[0:size]

  def impedance(self):
    size = self.sweep_size
    return 50.0 * (self.open[0:size] - self.load[0:size]) * (self.dut[0:size] - self.short[0:size]) / ((self.load[0:size] - self.short[0:size]) * (self.open[0:size] - self.dut[0:size]))

  def gamma(self):
    z = self.impedance()
    return (z - 50.0)/(z + 50.0)

  def plot_gain(self):
    if self.cursor is not None: self.cursor.hide().disable()
    matplotlib.rcdefaults()
    self.figure.clf()
    self.figure.subplots_adjust(left = 0.12, bottom = 0.12, right = 0.88, top = 0.98)
    axes1 = self.figure.add_subplot(111)
    axes1.cla()
    axes1.xaxis.set_major_formatter(FuncFormatter(metric_prefix))
    axes1.yaxis.set_major_formatter(FuncFormatter(metric_prefix))
    axes1.tick_params('y', color = 'blue', labelcolor = 'blue')
    axes1.yaxis.label.set_color('blue')
    gain = self.gain()
    axes1.plot(self.xaxis, 20.0 * np.log10(np.absolute(gain)), color = 'blue', label = 'Gain')
    axes2 = axes1.twinx()
    axes2.spines['left'].set_color('blue')
    axes2.spines['right'].set_color('red')
    axes1.set_xlabel('Hz')
    axes1.set_ylabel('Gain, dB')
    axes2.set_ylabel('Phase angle')
    axes2.tick_params('y', color = 'red', labelcolor = 'red')
    axes2.yaxis.label.set_color('red')
    axes2.plot(self.xaxis, np.angle(gain, deg = True), color = 'red', label = 'Phase angle')
    self.cursor = datacursor(axes = self.figure.get_axes(), formatter = LabelFormatter(), display = 'multiple')
    self.canvas.draw()

  def plot_magphase(self, data):
    if self.cursor is not None: self.cursor.hide().disable()
    matplotlib.rcdefaults()
    self.figure.clf()
    self.figure.subplots_adjust(left = 0.12, bottom = 0.12, right = 0.88, top = 0.98)
    axes1 = self.figure.add_subplot(111)
    axes1.cla()
    axes1.xaxis.set_major_formatter(FuncFormatter(metric_prefix))
    axes1.yaxis.set_major_formatter(FuncFormatter(metric_prefix))
    axes1.tick_params('y', color = 'blue', labelcolor = 'blue')
    axes1.yaxis.label.set_color('blue')
    axes1.plot(self.xaxis, np.absolute(data), color = 'blue', label = 'Magnitude')
    axes2 = axes1.twinx()
    axes2.spines['left'].set_color('blue')
    axes2.spines['right'].set_color('red')
    axes1.set_xlabel('Hz')
    axes1.set_ylabel('Magnitude')
    axes2.set_ylabel('Phase angle')
    axes2.tick_params('y', color = 'red', labelcolor = 'red')
    axes2.yaxis.label.set_color('red')
    axes2.plot(self.xaxis, np.angle(data, deg = True), color = 'red', label = 'Phase angle')
    self.cursor = datacursor(axes = self.figure.get_axes(), formatter = LabelFormatter(), display = 'multiple')
    self.canvas.draw()

  def plot_open(self):
    self.plot_magphase(self.open[0:self.sweep_size])

  def plot_short(self):
    self.plot_magphase(self.short[0:self.sweep_size])

  def plot_load(self):
    self.plot_magphase(self.load[0:self.sweep_size])

  def plot_dut(self):
    self.plot_magphase(self.dut[0:self.sweep_size])

  def plot_smith_grid(self, axes, color):
    load = 50.0
    ticks = np.array([0.0, 0.2, 0.5, 1.0, 2.0, 5.0])
    for tick in ticks * load:
      axis = np.logspace(-4, np.log10(1.0e3), 200) * load
      z = tick + 1.0j * axis
      gamma = (z - load)/(z + load)
      axes.plot(gamma.real, gamma.imag, color = color, linewidth = 0.4, alpha = 0.3)
      axes.plot(gamma.real, -gamma.imag, color = color, linewidth = 0.4, alpha = 0.3)
      z = axis + 1.0j * tick
      gamma = (z - load)/(z + load)
      axes.plot(gamma.real, gamma.imag, color = color, linewidth = 0.4, alpha = 0.3)
      axes.plot(gamma.real, -gamma.imag, color = color, linewidth = 0.4, alpha = 0.3)
      if tick == 0.0:
        axes.text(1.0, 0.0, u'\u221E', color = color, ha = 'left', va = 'center', clip_on = True, fontsize = 18.0)
        axes.text(-1.0, 0.0, u'0\u03A9', color = color, ha = 'left', va = 'bottom', clip_on = True, fontsize = 12.0)
        continue
      lab = u'%d\u03A9' % tick
      x = (tick - load) / (tick + load)
      axes.text(x, 0.0, lab, color = color, ha = 'left', va = 'bottom', clip_on = True, fontsize = 12.0)
      lab = u'j%d\u03A9' % tick
      z =  1.0j * tick
      gamma = (z - load)/(z + load) * 1.05
      x = gamma.real
      y = gamma.imag
      angle = np.angle(gamma) * 180.0 / np.pi - 90.0
      axes.text(x, y, lab, color = color, ha = 'center', va = 'center', clip_on = True, rotation = angle, fontsize = 12.0)
      lab = u'-j%d\u03A9' % tick
      axes.text(x, -y, lab, color = color, ha = 'center', va = 'center', clip_on = True, rotation = -angle, fontsize = 12.0)

  def plot_smith(self):
    if self.cursor is not None: self.cursor.hide().disable()
    matplotlib.rcdefaults()
    self.figure.clf()
    self.figure.subplots_adjust(left = 0.0, bottom = 0.0, right = 1.0, top = 1.0)
    axes1 = self.figure.add_subplot(111)
    self.plot_smith_grid(axes1, 'blue')
    gamma = self.gamma()
    plot, = axes1.plot(gamma.real, gamma.imag, color = 'red')
    axes1.axis('equal')
    axes1.set_xlim(-1.12, 1.12)
    axes1.set_ylim(-1.12, 1.12)
    axes1.xaxis.set_visible(False)
    axes1.yaxis.set_visible(False)
    for loc, spine in axes1.spines.items():
      spine.set_visible(False)
    self.cursor = datacursor(plot, formatter = SmithFormatter(self.xaxis), display = 'multiple')
    self.canvas.draw()

  def plot_imp(self):
    self.plot_magphase(self.impedance())

  def plot_rc(self):
    self.plot_magphase(self.gamma())

  def plot_swr(self):
    if self.cursor is not None: self.cursor.hide().disable()
    matplotlib.rcdefaults()
    self.figure.clf()
    self.figure.subplots_adjust(left = 0.12, bottom = 0.12, right = 0.88, top = 0.98)
    axes1 = self.figure.add_subplot(111)
    axes1.cla()
    axes1.xaxis.set_major_formatter(FuncFormatter(metric_prefix))
    axes1.yaxis.set_major_formatter(FuncFormatter(metric_prefix))
    axes1.set_xlabel('Hz')
    axes1.set_ylabel('SWR')
    magnitude = np.absolute(self.gamma())
    swr = np.maximum(1.0, np.minimum(100.0, (1.0 + magnitude) / np.maximum(1.0e-20, 1.0 - magnitude)))
    axes1.plot(self.xaxis, swr, color = 'blue', label = 'SWR')
    self.cursor = datacursor(axes = self.figure.get_axes(), formatter = LabelFormatter(), display = 'multiple')
    self.canvas.draw()

  def plot_rl(self):
    if self.cursor is not None: self.cursor.hide().disable()
    matplotlib.rcdefaults()
    self.figure.clf()
    self.figure.subplots_adjust(left = 0.12, bottom = 0.12, right = 0.88, top = 0.98)
    axes1 = self.figure.add_subplot(111)
    axes1.cla()
    axes1.xaxis.set_major_formatter(FuncFormatter(metric_prefix))
    axes1.set_xlabel('Hz')
    axes1.set_ylabel('Return loss, dB')
    magnitude = np.absolute(self.gamma())
    axes1.plot(self.xaxis, 20.0 * np.log10(magnitude), color = 'blue', label = 'Return loss')
    self.cursor = datacursor(axes = self.figure.get_axes(), formatter = LabelFormatter(), display = 'multiple')
    self.canvas.draw()

  def write_cfg(self):
    dialog = QFileDialog(self, 'Write configuration settings', '.', '*.ini')
    dialog.setDefaultSuffix('ini')
    dialog.setAcceptMode(QFileDialog.AcceptSave)
    dialog.setOptions(QFileDialog.DontConfirmOverwrite)
    if dialog.exec() == QDialog.Accepted:
      name = dialog.selectedFiles()
      settings = QSettings(name[0], QSettings.IniFormat)
      self.write_cfg_settings(settings)

  def read_cfg(self):
    dialog = QFileDialog(self, 'Read configuration settings', '.', '*.ini')
    dialog.setDefaultSuffix('ini')
    dialog.setAcceptMode(QFileDialog.AcceptOpen)
    if dialog.exec() == QDialog.Accepted:
      name = dialog.selectedFiles()
      settings = QSettings(name[0], QSettings.IniFormat)
      self.read_cfg_settings(settings)

  def write_cfg_settings(self, settings):
    settings.setValue('addr', self.addrValue.text())
    settings.setValue('start', self.startValue.value())
    settings.setValue('stop', self.stopValue.value())
    settings.setValue('rate', self.rateValue.currentIndex())
    settings.setValue('corr', self.corrValue.value())
    size = self.sizeValue.value()
    settings.setValue('size', size)
    for i in range(0, size):
      settings.setValue('open_real_%d' % i, float(self.open.real[i]))
      settings.setValue('open_imag_%d' % i, float(self.open.imag[i]))
    for i in range(0, size):
      settings.setValue('short_real_%d' % i, float(self.short.real[i]))
      settings.setValue('short_imag_%d' % i, float(self.short.imag[i]))
    for i in range(0, size):
      settings.setValue('load_real_%d' % i, float(self.load.real[i]))
      settings.setValue('load_imag_%d' % i, float(self.load.imag[i]))
    for i in range(0, size):
      settings.setValue('dut_real_%d' % i, float(self.dut.real[i]))
      settings.setValue('dut_imag_%d' % i, float(self.dut.imag[i]))

  def read_cfg_settings(self, settings):
    self.addrValue.setText(settings.value('addr', '192.168.1.100'))
    self.startValue.setValue(settings.value('start', 100, type = int))
    self.stopValue.setValue(settings.value('stop', 60000, type = int))
    self.rateValue.setCurrentIndex(settings.value('rate', 0, type = int))
    self.corrValue.setValue(settings.value('corr', 0, type = int))
    size = settings.value('size', 600, type = int)
    self.sizeValue.setValue(size)
    for i in range(0, size):
      real = settings.value('open_real_%d' % i, 0.0, type = float)
      imag = settings.value('open_imag_%d' % i, 0.0, type = float)
      self.open[i] = real + 1.0j * imag
    for i in range(0, size):
      real = settings.value('short_real_%d' % i, 0.0, type = float)
      imag = settings.value('short_imag_%d' % i, 0.0, type = float)
      self.short[i] = real + 1.0j * imag
    for i in range(0, size):
      real = settings.value('load_real_%d' % i, 0.0, type = float)
      imag = settings.value('load_imag_%d' % i, 0.0, type = float)
      self.load[i] = real + 1.0j * imag
    for i in range(0, size):
      real = settings.value('dut_real_%d' % i, 0.0, type = float)
      imag = settings.value('dut_imag_%d' % i, 0.0, type = float)
      self.dut[i] = real + 1.0j * imag

  def write_csv(self):
    dialog = QFileDialog(self, 'Write csv file', '.', '*.csv')
    dialog.setDefaultSuffix('csv')
    dialog.setAcceptMode(QFileDialog.AcceptSave)
    dialog.setOptions(QFileDialog.DontConfirmOverwrite)
    if dialog.exec() == QDialog.Accepted:
      name = dialog.selectedFiles()
      fh = open(name[0], 'w')
      gamma = self.gamma()
      size = self.sizeValue.value()
      fh.write('frequency;open.real;open.imag;short.real;short.imag;load.real;load.imag;dut.real;dut.imag\n')
      for i in range(0, size):
        fh.write('0.0%.8d;%12.9f;%12.9f;%12.9f;%12.9f;%12.9f;%12.9f;%12.9f;%12.9f\n' % (self.xaxis[i], self.open.real[i], self.open.imag[i], self.short.real[i], self.short.imag[i], self.load.real[i], self.load.imag[i], self.dut.real[i], self.dut.imag[i]))
      fh.close()

  def write_s1p(self):
    dialog = QFileDialog(self, 'Write s1p file', '.', '*.s1p')
    dialog.setDefaultSuffix('s1p')
    dialog.setAcceptMode(QFileDialog.AcceptSave)
    dialog.setOptions(QFileDialog.DontConfirmOverwrite)
    if dialog.exec() == QDialog.Accepted:
      name = dialog.selectedFiles()
      fh = open(name[0], 'w')
      gamma = self.gamma()
      size = self.sizeValue.value()
      fh.write('# GHz S MA R 50\n')
      for i in range(0, size):
        fh.write('0.0%.8d   %8.6f %7.2f\n' % (self.xaxis[i], np.absolute(gamma[i]), np.angle(gamma[i], deg = True)))
      fh.close()

  def write_s2p(self):
    dialog = QFileDialog(self, 'Write s2p file', '.', '*.s2p')
    dialog.setDefaultSuffix('s2p')
    dialog.setAcceptMode(QFileDialog.AcceptSave)
    dialog.setOptions(QFileDialog.DontConfirmOverwrite)
    if dialog.exec() == QDialog.Accepted:
      name = dialog.selectedFiles()
      fh = open(name[0], 'w')
      gain = self.gain()
      gamma = self.gamma()
      size = self.sizeValue.value()
      fh.write('# GHz S MA R 50\n')
      for i in range(0, size):
        fh.write('0.0%.8d   %8.6f %7.2f   %8.6f %7.2f   0.000000    0.00   0.000000    0.00\n' % (self.xaxis[i], np.absolute(gamma[i]), np.angle(gamma[i], deg = True), np.absolute(gain[i]), np.angle(gain[i], deg = True)))
      fh.close()