def create_graph_tab(self, record): """ Creates a widget displaying the data in record i """ widget = QtWidgets.QWidget(self) # Create figure figure = matplotlib.figure.Figure() figure.suptitle(self._wcp.filename()) canvas = backend.FigureCanvasQTAgg(figure) canvas.setParent(widget) axes = figure.add_subplot(1, 1, 1) toolbar = backend.NavigationToolbar2QT(canvas, widget) # Draw lines for i in range(self._wcp.channels()): axes.plot( np.array(self._wcp.times(), copy=True), np.array(self._wcp.values(record, i), copy=True), ) # Create a layout vbox = QtWidgets.QVBoxLayout() vbox.addWidget(canvas) vbox.addWidget(toolbar) widget.setLayout(vbox) self._figures.append(figure) self._axes.append(axes) return widget
def create_graph_tab(self, time, data): """ Creates a widget displaying a time series. """ widget = QtWidgets.QWidget(self) # Create figure figure = matplotlib.figure.Figure() figure.suptitle(self._filename) canvas = backend.FigureCanvasQTAgg(figure) canvas.setParent(widget) axes = figure.add_subplot(1, 1, 1) toolbar = backend.NavigationToolbar2QT(canvas, widget) # Draw line if time is None: axes.plot(data) else: axes.plot(time, data) # Create a layout vbox = QtWidgets.QVBoxLayout() vbox.addWidget(canvas) vbox.addWidget(toolbar) widget.setLayout(vbox) self._figures.append(figure) self._axes.append(axes) return widget
def create_graph_tab(self, time, key): """ Creates a widget displaying a graph. """ widget = QtWidgets.QWidget(self) # Create figure figure = matplotlib.figure.Figure() figure.suptitle(self._atf.filename()) canvas = backend.FigureCanvasQTAgg(figure) canvas.setParent(widget) axes = figure.add_subplot(1, 1, 1) toolbar = backend.NavigationToolbar2QT(canvas, widget) # Draw lines axes.plot(self._atf[time], self._atf[key]) # Create a layout vbox = QtWidgets.QVBoxLayout() vbox.addWidget(canvas) vbox.addWidget(toolbar) widget.setLayout(vbox) self._figures.append(figure) self._axes.append(axes) # Return widget return widget
def create_protocol_tab(self, channel): """ Creates a widget displaying a stored D/A signal. """ widget = QtWidgets.QWidget(self) # Create figure figure = matplotlib.figure.Figure() figure.suptitle(self._abf.filename()) canvas = backend.FigureCanvasQTAgg(figure) canvas.setParent(widget) axes = figure.add_subplot(1, 1, 1) toolbar = backend.NavigationToolbar2QT(canvas, widget) # Draw lines name = 'DA(' + str(channel) + ')' # Default if no data is present times = None for i, sweep in enumerate(self._abf.protocol()): if times is None: name = 'DA' + str(sweep[channel].number()) + ': ' \ + sweep[channel].name() times = sweep[channel].times() axes.plot(times, sweep[channel].values()) # Create a layout vbox = QtWidgets.QVBoxLayout() vbox.addWidget(canvas) vbox.addWidget(toolbar) widget.setLayout(vbox) self._figures.append(figure) self._axes.append(axes) return widget, name
def create_graph_tab(self, key, data): """ Creates a widget displaying the ``data`` stored under ``key``. """ widget = QtWidgets.QWidget(self) # Create figure figure = matplotlib.figure.Figure() figure.suptitle(self._filename) canvas = backend.FigureCanvasQTAgg(figure) canvas.setParent(widget) axes = figure.add_subplot(1, 1, 1) axes.set_title(key) toolbar = backend.NavigationToolbar2QT(canvas, widget) # Draw lines axes.plot(self._time, data) # Create a layout vbox = QtWidgets.QVBoxLayout() vbox.addWidget(canvas) vbox.addWidget(toolbar) widget.setLayout(vbox) self._figures.append(figure) self._axes.append(axes) return widget
def __init__(self, parent, sim_method, output_stream, duration=1000): super(Explorer, self).__init__(parent) self.setWindowTitle('Myokit Explorer') self._sim_method = sim_method self._stream = output_stream # Set guess for run times guess_pre = 0 guess_run = duration # Explorer data self._data = None self._keys = None # Fix background color of line edits self.setStyleSheet('QLineEdit{background: white;}') # Create top widgets label1 = QtWidgets.QLabel('Run unlogged for ') label2 = QtWidgets.QLabel(' and then log for ') self._pre_field = QtWidgets.QLineEdit(str(guess_pre)) self._pre_valid = QtGui.QDoubleValidator() self._pre_valid.setBottom(0) self._pre_field.setValidator(self._pre_valid) self._run_field = QtWidgets.QLineEdit(str(guess_run)) self._run_valid = QtGui.QDoubleValidator() self._run_valid.setBottom(0) self._run_field.setValidator(self._run_valid) self._clear_button = QtWidgets.QPushButton('Clear graphs') self._clear_button.clicked.connect(self.action_clear) self._run_button = QtWidgets.QPushButton('Run') self._run_button.clicked.connect(self.action_run) # Create graph widgets self._axes = None self._figure = matplotlib.figure.Figure() self._canvas = backend.FigureCanvasQTAgg(self._figure) self._toolbar = backend.NavigationToolbar2QT(self._canvas, self) self._select_x = QtWidgets.QComboBox() self._select_x.currentIndexChanged.connect(self.combo_changed) self._select_y = QtWidgets.QComboBox() self._select_y.currentIndexChanged.connect(self.combo_changed) # Create bottom widgets self._close_button = QtWidgets.QPushButton('Close') self._close_button.clicked.connect(self.action_close) # Create button layout button_layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight) button_layout.addWidget(label1) button_layout.addWidget(self._pre_field) button_layout.addWidget(label2) button_layout.addWidget(self._run_field) button_layout.addWidget(self._clear_button) button_layout.addWidget(self._run_button) # Create graph options layout graph_option_layout = QtWidgets.QBoxLayout( QtWidgets.QBoxLayout.LeftToRight) graph_option_layout.addWidget(self._select_x) graph_option_layout.addWidget(self._select_y) # Create bottom layout bottom_layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight) bottom_layout.addWidget(self._close_button) # Create central layout layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.TopToBottom) layout.addLayout(button_layout) layout.addLayout(graph_option_layout) layout.addWidget(self._canvas) layout.addWidget(self._toolbar) layout.addLayout(bottom_layout) self.setLayout(layout)
def __init__(self, parent, title, var, func, args): super(VarGrapher, self).__init__(parent) self.setFixedSize(700, 600) self.setWindowTitle(title) # Figure panel self._figure = matplotlib.figure.Figure() self._canvas = backend.FigureCanvasQTAgg(self._figure) self._toolbar = backend.NavigationToolbar2QT(self._canvas, self) # Variable panel self._variable_widget = QtWidgets.QWidget() # Button panel self._button_widget = QtWidgets.QWidget() # Central widget layout = QtWidgets.QVBoxLayout() layout.addWidget(self._canvas) layout.addWidget(self._toolbar) layout.addWidget(self._variable_widget) layout.addWidget(self._button_widget) self.setLayout(layout) # Get function handle, information object self._func = func self._args = args self._var = var # Variable ranges grid = QtWidgets.QGridLayout() self._bounds = {} for k, lhs in enumerate(self._args): var = lhs.var() # Guess appropriate bounds if var.label() == 'membrane_potential' or \ var.name().lower() in ['v', 'voltage', 'potential']: if var.unit() == myokit.units.volt: lohi = (-0.1, 0.1) else: lohi = (-100.0, 100.0) else: v = lhs.eval() if v >= 0 and v <= 1: lohi = (0.0, 1.0) elif v < 0: lohi = (-50, 50) else: lohi = (0, 100) # Row and column of first widget in grid row = k // 2 col = (k % 2) * 3 # Add label label = QtWidgets.QLabel(var.qname()) grid.addWidget(label, row, col) # Add lower and upper bound or single value if k < 2: # Lower editlo = QtWidgets.QLineEdit() editlo.setValidator(QtGui.QDoubleValidator()) editlo.setText(str(lohi[0])) grid.addWidget(editlo, row, col + 1) # Upper edithi = QtWidgets.QLineEdit() edithi.setValidator(QtGui.QDoubleValidator()) edithi.setText(str(lohi[1])) grid.addWidget(edithi, row, col + 2) self._bounds[lhs] = (editlo, edithi) else: # Single, fixed value v = 0.5 * (lohi[0] + lohi[1]) edit = QtWidgets.QLineEdit(str(v)) edit.setReadOnly(True) grid.addWidget(edit, row, col + 1) self._bounds[lhs] = (edit, edit) self._variable_widget.setLayout(grid) # Buttons layout = QtWidgets.QHBoxLayout() # Graph button button = QtWidgets.QPushButton('Refresh') button.clicked.connect(self.action_draw) layout.addWidget(button) # Close button button = QtWidgets.QPushButton('Close') button.clicked.connect(self.close) layout.addWidget(button) self._button_widget.setLayout(layout) # Draw! self.action_draw()