Ejemplo n.º 1
0
def test_TextItem_setAngle():
    plt = pg.plot()
    plt.setXRange(-10, 10)
    plt.setYRange(-20, 20)
    item = pg.TextItem(text="test")
    plt.addItem(item)

    t1 = item.transform()

    item.setAngle(30)
    app.processEvents()

    t2 = item.transform()

    assert t1 != t2
    assert not t1.isRotating()
    assert t2.isRotating()
Ejemplo n.º 2
0
	def addEventPlot(self, event_name, event_id):
		if (event_name == "TID"):
			color = (255,0,0)
		elif (event_name == "KEY"):
			color = (0, 255, 0)
		elif (event_name == "LPT"):
			color = (0,0,255)
		else:
			color = (255, 255, 255)

		self.events_detected.append(self.data_plot.shape[0]-1)
		self.events_detected.append(event_id)					
		self.events_curves.append(self.plot_handler.plot(pen=color, x=np.array([self.x_ticks[-1], self.x_ticks[-1]]), y=np.array([+1.5*self.scale, -1.5*self.scale*self.config['eeg_channels']])))
		text = pg.TextItem(event_name + "(" + str(self.events_detected[-1]) + ")", anchor=(1.1,0), fill=(0,0,0), color=color)
		text.setPos(self.x_ticks[-1], +1.5*self.scale)
		self.events_text.append(text)
		self.plot_handler.addItem(self.events_text[-1])
    def setVoltages(self):

        self.spot_plot_list = []
        #=======================================================================
        # for i in range(0,37):
        #     self.voltageIndicators[i].setText("{:.2f}".format(self.voltageSliders[i].value()))
        #     #spots.append({'pos': self.electrodeCoordinates[i,:], 'data': 1, 'brush':pq.intColor(np.round(self.voltageSliders[i].value())), 'symbol': 'o', 'size': 50})
        #     spot = {'pos': self.electrodeCoordinates[i,:],'data':1,'brush':pq.hsvColor(self.voltageSliders[i].value()/(self.maxVoltage*5.5),sat=1.0,val=1.0, alpha=1.0),'symbol':'o','size': 40,'pen':0}
        #     #spots.append(spot)
        #     #spots.append({'pos': self.electrodeCoordinates[i,:], 'data': 1, 'brush':self.map.map(self.voltageSliders[i].value(),mode='qcolor'), 'symbol': 'o', 'size': 40})
        #     plot = pq.ScatterPlotItem(size=50, pxMode=True, symbol='o', name=str(i))
        #     plot.addPoints([spot])
        #     self.spot_plot_list.append(plot)
        #     self.plotWidget1.addItem(plot)
        #=======================================================================

        self.plot11 = self.plotWidget1.addPlot()
        #self.scatterPlotItem1 = pq.ScatterPlotItem(size=30, pen=pq.mkPen(None), brush=pq.mkBrush(0, 0, 125+self.voltages[0]/2, 250))
        self.scatterPlotItem1 = pq.ScatterPlotItem(size=30, pen=pq.mkPen(None))
        self.scatterPlotItem1.addPoints(x=self.electrodeCoordinates[:, 0],
                                        y=self.electrodeCoordinates[:, 1])

        brushes = []
        for i in range(0, self.noChannels):
            chName = 'channel' + str(self.channelsList[i])
            self.adDevice.write_attribute(chName,
                                          self.voltages[i] / self.ampFactor)
            if i <= 36:
                brushes.append(
                    QtGui.QColor(255, self.voltages[i] / self.maxVoltage * 255,
                                 0, 220))
            #self.labelItem1 = pq.LabelItem()
            #self.labelItem1.setPos(self.electrodeCoordinates[0][0],self.electrodeCoordinates[0][1])
            #self.labelItem1.setPos(0,0)
            #self.labelItem1.setText('A', size = '8pt')
            #self.plotWidget1.addItem(self.labelItem1)
            #self.plot11.addItem(self.labelItem1)

        #for i in range(0,37)
        #print type(brushes)
        self.scatterPlotItem1.setBrush(brushes)
        self.plot11.addItem(self.scatterPlotItem1)
        self.scatterPlotItem1.sigClicked.connect(self.clicked)

        self.textItem = pq.TextItem()
        self.plot11.addItem(self.textItem)
Ejemplo n.º 4
0
    def __init__(self, parent=None, line=None, label=None, **kwargs):
        super().__init__(parent, **kwargs)
        self.setFlag(pg.GraphicsObject.ItemHasNoContents)

        if line is None:
            line = QtCore.QLineF(0, 0, 1, 0)

        self._spine = QtGui.QGraphicsLineItem(line, self)
        angle = line.angle()

        self._arrow = pg.ArrowItem(parent=self, angle=0)
        self._arrow.setPos(self._spine.line().p2())
        self._arrow.setRotation(angle)

        self._label = pg.TextItem(text=label, color=(10, 10, 10))
        self._label.setParentItem(self)
        self._label.setPos(self._spine.line().p2())
Ejemplo n.º 5
0
    def plot_k(self):
        """ 绘制K线 """
        axis_date = pg.AxisItem(orientation='bottom')
        axis_date.setTicks([self._axis_date])
        self._pw.setAxisItems({'bottom': axis_date})
        self._pw.showAxis('left', True)
        self._pw.showAxis('right', True)
        self._pw.showAxis('bottom', False)

        self._k_item = CandlestickItem(self._data)
        self._pw.addItem(self._k_item)
        # 添加第二个图形, 收盘价走势线
        self._pw.plot(x=list(self._xdict.keys()),
                      y=self._data['close'].values,
                      pen='r',
                      name='close')

        self._label_info = pg.TextItem()
        self._pw.addItem(self._label_info)
        self._pw.showGrid(x=True, y=True, alpha=0.5)

        self._v_line = pg.InfiniteLine(angle=90, movable=False)
        self._h_line = pg.InfiniteLine(angle=0, movable=False)
        self._pw.addItem(self._v_line, ignoreBounds=True)
        self._pw.addItem(self._h_line, ignoreBounds=True)

        self._view_box = self._pw.getPlotItem().getViewBox()

        # 显示部分数据
        _tmp_data = self._data.iloc[-120:]
        _x_left = _tmp_data.index[0]
        _x_right = _tmp_data.index[-1]
        _y_max = _tmp_data['high'].max()
        _y_min = _tmp_data['low'].min()
        self._y_min = _y_min * 0.99
        self._y_max = _y_max * 1.01
        top_left = QPointF(_x_left * 0.99, _y_max * 1.01)
        bottom_right = QPointF(_x_right * 1.01, _y_min * 0.99)
        self._view_box.setRange(rect=QRectF(top_left, bottom_right))
        # 设置Y轴的值范围和左右的padding
        self._view_box.setYRange(self._y_min, self._y_max, padding=0.1)

        # self._proxy 代理必须存在,不能用局部变量
        self._proxy = pg.SignalProxy(self._pw.scene().sigMouseMoved,
                                     rateLimit=30,
                                     slot=self.mouse_moved)
    def __init__(self):
        super().__init__()

        self.curve = None
        self.classif_region_curve = None
        self.combo_box_curve = None

        self.num = pg.TextItem(anchor=(0, 0), fill=(0, 0, 0, 0))
        self.classif_type = 0

        # os.chdir('..')
        # project_base_path = os.getcwd()
        avg_emg_path = 'machine_learning/avg_emg_class_type.npy'
        self.avg_emg_class_type = np.load(
            os.path.join(os.getcwd(), avg_emg_path))
        self.classified_data = None
        self.combo_classif = self.add_classif_num_combobox()
Ejemplo n.º 7
0
 def __init__(self, parent=None):
     super(crossCutWindow, self).__init__(parent=parent)
     self.cc = pg.PlotWidget()
     self.setCentralWidget(self.cc)
     self.parent = parent
     y = np.random.random(100)
     self.p = self.cc.plot()
     changingLabel = QtGui.QLabel()
     font = changingLabel.font()
     font.setPointSize(16)
     self.text = pg.TextItem(text='',
                             color=(200, 200, 200),
                             border='w',
                             fill=(0, 0, 255, 100))
     self.text.setFont(font)
     self.cc.addItem(self.text)
     self.cc.setRange(xRange=(0, 100), yRange=(-20, 500))
Ejemplo n.º 8
0
    def add_to_viewwidget(self, viewwidget=None):
        if viewwidget is not None:
            self.viewwidget = viewwidget
        self.viewwidget.addItem(self)

        # Removing the handle from this CricleROI
        self.removeHandle(0)

        # create a new free handle for the name tag, positioned at "east" on the circle.
        self.my_handle = self.addRotateHandle([1, 0.5], [0.5, 0.5])
        self.sigRegionChangeFinished.connect(self._redraw_label)
        self.label = pg.TextItem(text=self.poi.get_name(),
                                 anchor=(0, 1),
                                 color=self.color)

        self.setAngle(30)
        self.setPos(self.position + self.get_marker_offset())
Ejemplo n.º 9
0
    def _setup_plot(self):
        self.plot.clear()

        points = self.ca
        variables = self.selected_vars()
        colors = colorpalette.ColorPaletteGenerator(len(variables))

        p_axes = self._p_axes()

        if len(variables) == 2:
            row_points = self.ca.row_factors[:, p_axes]
            col_points = self.ca.col_factors[:, p_axes]
            points = [row_points, col_points]
        else:
            points = self.ca.row_factors[:, p_axes]
            counts = [len(var.values) for var in variables]
            range_indices = numpy.cumsum([0] + counts)
            ranges = zip(range_indices, range_indices[1:])
            points = [points[s:e] for s, e in ranges]

        for i, (v, points) in enumerate(zip(variables, points)):
            color_outline = colors[i]
            color_outline.setAlpha(200)
            color = QColor(color_outline)
            color.setAlpha(120)
            item = ScatterPlotItem(
                x=points[:, 0], y=points[:, 1], brush=QBrush(color),
                pen=pg.mkPen(color_outline.darker(120), width=1.5),
                size=numpy.full((points.shape[0],), 10.1),
            )
            self.plot.addItem(item)

            for name, point in zip(v.values, points):
                item = pg.TextItem(name, anchor=(0.5, 0))
                self.plot.addItem(item)
                item.setPos(point[0], point[1])

        inertia = self.ca.inertia_of_axis()
        inertia = 100 * inertia / numpy.sum(inertia)

        ax = self.plot.getAxis("bottom")
        ax.setLabel("Component {} ({:.1f}%)"
                    .format(p_axes[0] + 1, inertia[p_axes[0]]))
        ax = self.plot.getAxis("left")
        ax.setLabel("Component {} ({:.1f}%)"
                    .format(p_axes[1] + 1, inertia[p_axes[1]]))
Ejemplo n.º 10
0
 def addLabelTrace(self, waveItem, plotItem):
     'Add station label for each trace'
     fillBrush = self.opts.colorwaves[int(waveItem.sacdh.selected)]
     self.getLabelTrace(waveItem)
     sacdh = waveItem.sacdh
     waveLabel = pg.TextItem(waveItem.waveLabelText,
                             color=fillBrush[:3],
                             anchor=(0, 0.5))
     font = QtGui.QFontDatabase.systemFont(QtGui.QFontDatabase.FixedFont)
     waveLabel.setFont(font)
     plotItem.addItem(waveLabel)
     yy = sacdh.datbase
     xx = sacdh.time[0] - sacdh.gethdr(self.opts.qcpara.ichdrs[0])
     ip = int(self.opts.qcpara.ichdrs[0][1])
     xx = sacdh.b - sacdh.thdrs[ip]
     waveLabel.setPos(xx, yy)
     waveItem.waveLabel = waveLabel
Ejemplo n.º 11
0
 def __init__(self, dataForCandle=None):
     super(pgCandleWidget, self).__init__()
     # 0) adds candle
     self.candleData = dataForCandle 
     self.item01 = CandlestickItem(dataForCandle)        
     self.addItem(self.item01) 
     # 1)cross hair
     self.vLine = pg.InfiniteLine(angle=90, movable=False)
     self.hLine = pg.InfiniteLine(angle=0, movable=False)
     self.addItem(self.vLine, ignoreBounds=True)
     self.addItem(self.hLine, ignoreBounds=True)
     # 2) adds textInfo
     self.textInfo = pg.TextItem("test")
     self.addItem(self.textInfo, ignoreBounds=True)        
     self.item01.sigClicked.connect(self.mouseClicked)         
     
     self.proxy = pg.SignalProxy(self.scene().sigMouseMoved, rateLimit=60, slot=self.mouseMoved)
Ejemplo n.º 12
0
    def calc(self):

        if (self.inputError):
            self.uResult.setText(self.tr('Invalid Input in some field'))
            return

        try:
            print("Inside calc")

            C = float(self.uCap.text()) * 1e-6
            R = float(self.uRes.text())
            intervals = float(self.intervals.text())
            start = int(self.sFreq.text())
            end = int(self.eFreq.text())
            print(C, R, intervals, start, end)

            #mStep = self.updateStep()
            mStep = 10

            print("mStep: " + str(mStep))
            output = []
            #self.p.set_sine_amp(2)

            for i in range(start, end, mStep):
                #print(i)
                #print(self.p)
                f = self.p.set_sine(i)
                time.sleep(0.2)

                #print("set sine")
                volt = self.p.get_voltage('A1')
                current = volt / R
                data = (f, current, volt)
                plot = pg.TextItem(text=str(current), color='y')
                plot.setPos(f, current)
                self.legends.append(plot)
                self.pwin.addItem(plot)
                print((f, volt))
                output.append(data)

            #print(output)

        except:
            print("Error")
            print(traceback.format_exc())
            self.uResult.setText(self.tr('Invalid Input in some field'))
Ejemplo n.º 13
0
 def __init__(self, parent=None):
     pyqtgraph.setConfigOption('background', 'w')  #before loading widget
     super(ExampleApp, self).__init__(parent)
     self.setupUi(self)
     self.grECG.plotItem.showGrid(True, True, 0.7)
     self.btnSave.clicked.connect(self.saveFig)
     self.btnSite.clicked.connect(self.website)
     stamp = "DIY ECG by Scott Harden"
     self.stamp = pyqtgraph.TextItem(stamp,
                                     anchor=(-.01, 1),
                                     color=(150, 150, 150),
                                     fill=pyqtgraph.mkBrush('w'))
     self.ear = swhear.Ear(chunk=int(100))  # determines refresh rate
     if len(self.ear.valid_input_devices()):
         self.ear.stream_start()
         self.lblDevice.setText(self.ear.msg)
         self.update()
Ejemplo n.º 14
0
    def __init__(self, shape, vb, pos, size, handlePos, handleCenter, *args,
                 **kwargs):

        self.mainShape = shape

        pg.ROI.__init__(self, pos, size, pen='m', *args, **kwargs)
        self.addScaleHandle(handlePos, handleCenter, lockAspect=True)
        vb.addItem(self)

        self.label = pg.TextItem()
        self.label.setPos(self.pos()[0] + self.size()[0],
                          self.pos()[1] + self.size()[1])
        self.label.setText('100x100')

        self.sigRegionChanged.connect(self.updateText)

        vb.addItem(self.label)
Ejemplo n.º 15
0
 def length_warning(self):
     self.xy_plot.clear()
     self.hist_plot.clear()
     text = "⚠️ dataset lengths mismatch:\n\n"
     if self.mismatch['bins']:
         text = ''.join([
             text, "bin boundaries should have the same length\n"
             "as the first dimension of histogram counts."
         ])
     if self.mismatch['bins'] and self.mismatch['xs']:
         text = ''.join([text, '\n\n'])
     if self.mismatch['xs']:
         text = ''.join([
             text, "point abscissas should have the same length\n"
             "as the second dimension of histogram counts."
         ])
     self.xy_plot.addItem(pyqtgraph.TextItem(text))
Ejemplo n.º 16
0
 def __init__(self, parent=None):
     super(MapWidget, self).__init__(parent)
     # Add the map to the view, and turn off some of the automatic interactive properties
     self.map = self.addPlot()
     self.map.setMenuEnabled(enableMenu=False)
     self.map.hideButtons()
     self.stas = []  # The station names for the station spot items
     self.staItem = None  # The station scatter item
     self.selectSta = None  # Which station is currently selected
     self.curEveItem = None  # The current event scatter item
     self.prevEveItem = None  # The previous event scatter item
     # Add in the hovered over station label
     self.hoverStaItem = pg.TextItem(text='', anchor=(0.5, 1))
     self.hoverStaItem.hide()
     self.map.addItem(self.hoverStaItem)
     # Show station text when hovering over the station symbol
     self.scene().sigMouseMoved.connect(self.onHover)
Ejemplo n.º 17
0
    def __init__(self, task_dict):
        super().__init__()

        self.task_dict = task_dict  # taskdict=dict(name=  ,idnumber=  ,task_type=int(0 to 12), time_start=, time_end=)
        qc = cmap.mapToQColor(task_dict['task_type'] / 12)
        qc.setAlpha(self.alpha)
        self.roi_item = GanttROI(task_dict['name'],
                                 task_dict['idnumber'],
                                 start=task_dict['time_start'],
                                 stop=task_dict['time_end'],
                                 brush=qc)
        self.roi_item.sigRegionChangeFinished.connect(
            self.show_hide_move_text())
        self.roi_item.setZValue(-1000)
        self.text_item = pg.TextItem(task_dict['name'])
        self.text_item.setPos(task_dict['time_start'], task_dict['idnumber'])
        self.roi_item.setZValue(-500)
Ejemplo n.º 18
0
    def AnnotationAdd(self, x, y, color='yellow', text=''):
        """
        Adds new annotation to plot scene.

        Parameters
        ----------
        x : float
            x position
        y : float
            y position
        color :
            'yellow', 'red', 'green' or 'blue'
        text : str
            Annotation text
        """
        if color == 'yellow':
            bgcolor = pg.mkBrush(250, 250, 150, 200)
        elif color == 'red':
            bgcolor = pg.mkBrush(250, 0, 0, 200)
        elif color == 'green':
            bgcolor = pg.mkBrush(0, 255, 0, 200)
        elif color == 'blue':
            bgcolor = pg.mkBrush(0, 0, 255, 200)
        c = pg.TextItem(anchor=(.5, .5), border=pg.mkPen(100, 100, 100), fill=bgcolor)
        c.setText(text=text, color=(0, 0, 0))
        # Y coordinate transformed to variance_units (for plot control)
        y_va = np.round(y / self.scaleVec[0]).astype('int')
        c.setPos(x, y_va)
        # create annotation object and add it to the list
        obj = CustomAnnotation()
        obj.pg_item = c
        obj.x = x
        obj.y_va = y_va
        obj.y_off = self.firstCh
        obj.color = color
        obj.text = text
        obj.session = self.parent.current_session
        self.AnnotationsList = np.append(self.AnnotationsList, obj)
        # List of positions (to calculate distances)
        if len(self.AnnotationsPosAV) > 0:
            self.AnnotationsPosAV = np.concatenate((self.AnnotationsPosAV,
                                                    np.array([x, y_va, self.firstCh]).reshape(1, 3)))
        else:
            self.AnnotationsPosAV = np.array([x, y_va, self.firstCh]).reshape(1, 3)
        self.refreshScreen()
        self.unsaved_changes_annotation = True
Ejemplo n.º 19
0
    def on_data_ready(self, t_start, t_stop, visibles, data):
        self.plot.clear()
        self.graphicsview.setBackground(self.params['background_color'])

        for e, chan in enumerate(visibles):

            if len(data[chan]) == 3:
                times, durations, labels = data[chan]
            elif len(data[chan]) == 4:
                times, durations, labels, _ = data[chan]
            else:
                raise ValueError("data has unexpected dimensions")

            color = self.by_channel_params.children()[e].param('color').value()
            color2 = QT.QColor(color)
            color2.setAlpha(130)

            ypos = visibles.size - e - 1

            for i in range(times.size):
                item = RectItem([times[i], ypos, durations[i], .9],
                                border=color,
                                fill=color2)
                item.setPos(times[i], visibles.size - e - 1)
                self.plot.addItem(item)

            if self.params['display_labels']:
                label_name = '{}: {}'.format(
                    chan, self.source.get_channel_name(chan=chan))
                label = pg.TextItem(label_name,
                                    color=color,
                                    anchor=(0, 0.5),
                                    border=None,
                                    fill=self.params['label_fill_color'])
                self.plot.addItem(label)
                label.setPos(t_start, ypos + 0.45)

        self.vline = pg.InfiniteLine(angle=90,
                                     movable=False,
                                     pen=self.params['vline_color'])
        self.vline.setZValue(1)  # ensure vline is above plot elements
        self.plot.addItem(self.vline)

        self.vline.setPos(self.t)
        self.plot.setXRange(t_start, t_stop, padding=0.0)
        self.plot.setYRange(0, visibles.size)
Ejemplo n.º 20
0
 def drawFinished(self):
     self.path.closeSubpath()
     self.path_item.setPath(self.path)
     self.ti = pg.TextItem(text='%d' % self.id,
                           fill=self.color,
                           color=(0, 0, 0))
     self.ti.setParentItem(self)
     self.ti.setPos(*self.getPoints()[0])
     self.sigChanged.emit(self)
     try:
         if getArea(self.getPoints()) < .2:
             raise Exception(
                 'ROI is too small, must have minimum area of .2')
     except:
         self.delete()
         return False
     return True
 def displayWaiting(self):
     if self.showIndexedPeaks:
         if self.numIndexedPeaksFound == 0:  # indexing proceeding
             xMargin = 5  # pixels
             maxX = np.max(self.parent.det.indexes_x(self.parent.evt)) + xMargin
             maxY = np.max(self.parent.det.indexes_y(self.parent.evt))
             # Draw a big triangle
             cenX = np.array((self.parent.cx,)) + 0.5
             cenY = np.array((self.parent.cy,)) + 0.5
             diameter = 256  # self.peakRadius*2+1
             self.parent.img.indexedPeak_feature.setData(cenY, cenX, symbol='t', \
                                                         size=diameter, brush=(255, 255, 255, 0), \
                                                         pen=pg.mkPen({'color': "#FF00FF", 'width': 3}),
                                                         pxMode=False)
             self.parent.img.abc_text = pg.TextItem(html='', anchor=(0, 0))
             self.parent.img.win.getView().addItem(self.parent.img.abc_text)
             self.parent.img.abc_text.setPos(maxY, maxX)
Ejemplo n.º 22
0
    def proc_ROI(self, parent):
        stat0 = []
        if self.extracted:
            for t, s in zip(self.scatter, self.tlabel):
                self.p0.removeItem(s)
                self.p0.removeItem(t)
        self.scatter = []
        self.tlabel = []
        for n in range(self.nROIs):
            ellipse = self.ROIs[n].ellipse
            yrange = self.ROIs[n].yrange
            xrange = self.ROIs[n].xrange
            x, y = np.meshgrid(xrange, yrange)
            ypix = y[ellipse].flatten()
            xpix = x[ellipse].flatten()
            lam = np.ones(ypix.shape)
            stat0.append({
                'ypix': ypix,
                'xpix': xpix,
                'lam': lam,
                'npix': ypix.size
            })
            self.tlabel.append(
                pg.TextItem(str(n), self.ROIs[n].color, anchor=(0, 0)))
            self.tlabel[-1].setPos(xpix.mean(), ypix.mean())
            self.p0.addItem(self.tlabel[-1])
            self.scatter.append(
                pg.ScatterPlotItem([xpix.mean()], [ypix.mean()],
                                   pen=self.ROIs[n].color,
                                   symbol='+'))
            self.p0.addItem(self.scatter[-1])
        if not os.path.isfile(parent.ops['reg_file']):
            parent.ops['reg_file'] = os.path.join(parent.basename, 'data.bin')

        F, Fneu, F_chan2, Fneu_chan2, spks, ops, stat = masks_and_traces(
            parent.ops, stat0, parent.stat)
        print(spks.shape)
        # print('After', stat[0].keys())
        # print('Orig', parent.stat[0].keys())
        self.Fcell = F
        self.Fneu = Fneu
        self.Spks = spks
        self.plot_trace()
        self.extracted = True
        self.new_stat = stat
        self.closeGUI.setEnabled(True)
Ejemplo n.º 23
0
    def __init__(self,parent,master):
        """Constructor"""
        self.__view = parent
        self.master = master
        super(Crosshair, self).__init__()

        self.xAxis = 0
        self.yAxis = 0

        self.datas = None

        self.yAxises    = [0 for i in range(3)]
        self.leftX      = [0 for i in range(3)]
        self.showHLine  = [False for i in range(3)]
        self.textPrices = [pg.TextItem('',anchor=(1,1)) for i in range(3)]
        self.views      = [parent.centralWidget.getItem(i+1,0) for i in range(3)]
        self.rects      = [self.views[i].sceneBoundingRect() for i in range(3)]
        self.vLines     = [pg.InfiniteLine(angle=90, movable=False) for i in range(3)]
        self.hLines     = [pg.InfiniteLine(angle=0,  movable=False) for i in range(3)]
        
        #mid 在y轴动态跟随最新价显示最新价和最新时间
        self.__textDate   = pg.TextItem('date',anchor=(1,1))
        self.__textInfo   = pg.TextItem('lastBarInfo')   
        self.__textSig    = pg.TextItem('lastSigInfo',anchor=(1,0))   
        self.__textSubSig = pg.TextItem('lastSubSigInfo',anchor=(1,0))   
        self.__textVolume = pg.TextItem('lastBarVolume',anchor=(1,0))   

        self.__textDate.setZValue(2)
        self.__textInfo.setZValue(2)
        self.__textSig.setZValue(2)
        self.__textSubSig.setZValue(2)
        self.__textVolume.setZValue(2)
        self.__textInfo.border = pg.mkPen(color=(230, 255, 0, 255), width=1.2)
        
        for i in range(3):
            self.textPrices[i].setZValue(2)
            self.vLines[i].setPos(0)
            self.hLines[i].setPos(0)
            self.vLines[i].setZValue(0)
            self.hLines[i].setZValue(0)
            self.views[i].addItem(self.vLines[i])
            self.views[i].addItem(self.hLines[i])
            self.views[i].addItem(self.textPrices[i])
        
        self.views[0].addItem(self.__textInfo, ignoreBounds=True)     
        self.views[0].addItem(self.__textSig, ignoreBounds=True)     
        self.views[1].addItem(self.__textVolume, ignoreBounds=True)     
        self.views[2].addItem(self.__textDate, ignoreBounds=True)
        self.views[2].addItem(self.__textSubSig, ignoreBounds=True)     
        self.proxy = pg.SignalProxy(self.__view.scene().sigMouseMoved, rateLimit=360, slot=self.__mouseMoved)        
        # 跨线程刷新界面支持
        self.signal.connect(self.update)
        self.signalInfo.connect(self.plotInfo)
Ejemplo n.º 24
0
    def setup(self, win):
        self.td_plot = win.addPlot(row=0, col=0, title="PSD input data")
        self.td_plot.setMenuEnabled(False)
        self.td_plot.addLegend()
        self.td_curves = []
        for i, depth in enumerate(self.depths):
            name = "{:.0f} cm".format(depth * 100)
            curve = self.td_plot.plot(pen=utils.pg_pen_cycler(i), name=name)
            self.td_curves.append(curve)

        self.collapsed_plot = win.addPlot(row=1,
                                          col=0,
                                          title="Collapsed sqrt(PSD)")
        self.collapsed_plot.setMenuEnabled(False)
        self.collapsed_plot.setXRange(0, 1)
        self.collapsed_curve = self.collapsed_plot.plot(
            pen=utils.pg_pen_cycler())
        self.collapsed_vline = pg.InfiniteLine(pen=utils.pg_pen_cycler())
        self.collapsed_vline.hide()
        self.collapsed_plot.addItem(self.collapsed_vline)

        bg = pg.mkColor(0xFF, 0xFF, 0xFF, 150)
        self.collapsed_text = pg.TextItem(anchor=(0, 1), color="k", fill=bg)
        self.collapsed_text.setPos(0, 0)
        self.collapsed_text.setZValue(100)
        self.collapsed_plot.addItem(self.collapsed_text)

        self.collapsed_history_plot = win.addPlot(
            row=2, col=0, title="Collapsed sqrt(PSD) history")
        self.collapsed_history_plot.setMenuEnabled(False)
        self.collapsed_history_im = pg.ImageItem()
        self.collapsed_history_im.setLookupTable(utils.pg_mpl_cmap("viridis"))
        self.collapsed_history_plot.addItem(self.collapsed_history_im)

        self.dw_plot = win.addPlot(row=3, col=0, title="Depthwise PSD")
        self.dw_plot.setMenuEnabled(False)
        self.dw_im = pg.ImageItem()
        self.dw_im.setLookupTable(utils.pg_mpl_cmap("viridis"))
        self.dw_plot.addItem(self.dw_im)
        self.dw_plot.setLabel("bottom", "Depth (cm)")
        self.dw_plot.getAxis("bottom").setTickSpacing(
            6 * self.downsampling_factor, 6)

        self.setup_is_done = True
        self.update_processing_config()
Ejemplo n.º 25
0
    def __init__(
            self,
            widget: ChartWidget,
            manager: BarManager,
            plots: Dict[str, pg.GraphicsObject],
            item_plot_map: Dict[ChartItem, pg.GraphicsObject],
            event_engine: EventEngine,
            #items: Dict[str, pg.GraphicsObject],

    ):
        """"""
        super().__init__()

        self._widget: ChartWidget = widget
        self._manager: BarManager = manager
        self._plots: Dict[str, pg.GraphicsObject] = plots
        self._item_plot_map: Dict[ChartItem, pg.GraphicsObject] = item_plot_map

        self._x: int = 0
        self._y: int = 0
        self._plot_name: str = ""

        self.current_interval = "1m"
        self.event_engine = event_engine


        self._init_ui()
        self._connect_signal()
        # 2019-12-15 lwh
        #self.items = items
        self.dt_ix = {}
        self.info_item = Dict[str, pg.TextItem]
        for plot_name, plot in self._plots.items():

            #print(plot_name)
            self.inf = pg.TextItem(
                "info",
                color=CURSOR_COLOR,
                border=CURSOR_COLOR,
                fill=BLACK_COLOR
            )
            self.inf.hide()
            self.inf.setZValue(2)
            self.inf.setFont(NORMAL_FONT)
            plot.addItem(self.inf)  # , ignoreBounds=True)
Ejemplo n.º 26
0
    def _plot_ladder_annotations(self):
        try:
            self._ladder_visible
        except (AttributeError, NameError):
            return
        try:
            self.currMaxY
        except (AttributeError, NameError):
            self.currMaxY = self._getMaxIntensityInRange(
                self.getAxis('bottom').range)

        xlimit = [self._mzs[0], self._mzs[-1]]
        for ladder_key, lastruct in self._ladder_visible.items():
            if ladder_key in self._ladder_anno_lines.keys():  # update
                self._ladder_anno_lines[ladder_key][0].setData(
                    [xlimit[0], xlimit[1]],
                    [self.currMaxY, self.currMaxY])  # horizontal line
                cntr = 0
                for x in lastruct.mz_list:
                    self._ladder_anno_lines[ladder_key][cntr + 1].setData(
                        [x, x], [0, self.currMaxY])
                    self._ladder_anno_labels[ladder_key][cntr].setPos(
                        x, self.currMaxY)  # horizon line doesn't have label
                    cntr += 1
            else:  # plot
                pen = pg.mkPen(lastruct.color, width=2, style=Qt.DotLine)
                self._ladder_anno_lines[ladder_key] = []
                self._ladder_anno_labels[ladder_key] = []

                self._ladder_anno_lines[
                    ladder_key].append(  # horizon line. index 0
                        self.plot([xlimit[0], xlimit[1]],
                                  [self.currMaxY, self.currMaxY],
                                  pen=pen))
                for x, txt_label in zip(lastruct.mz_list,
                                        lastruct.text_label_list):
                    self._ladder_anno_lines[ladder_key].append(
                        self.plot([x, x], [0, self.currMaxY], pen=pen))
                    label = pg.TextItem(text=txt_label,
                                        color=lastruct.color,
                                        anchor=(1, -1))
                    label.setPos(x, self.currMaxY)
                    label.setParentItem(
                        self._ladder_anno_lines[ladder_key][-1])
                    self._ladder_anno_labels[ladder_key].append(label)
Ejemplo n.º 27
0
    def _initialize(self):
        BaseOscilloscope._initialize(self)

        #create a trigger

        self.trigger.configure()
        self.trigger.input.connect(self.proxy_input.params)
        self.trigger.output.configure(protocol='inproc',
                                      transfermode='plaindata')
        self.trigger.initialize()

        #create a triggeraccumulator

        self.triggeraccumulator.configure(max_stack_size=np.inf)
        self.triggeraccumulator.inputs['signals'].connect(
            self.proxy_input.params)
        self.triggeraccumulator.inputs['events'].connect(self.trigger.output)
        self.triggeraccumulator.initialize()

        self.trigger.params.sigTreeStateChanged.connect(self.on_param_change)
        self.triggeraccumulator.params.sigTreeStateChanged.connect(
            self.on_param_change)

        self.curves = []
        self.channel_labels = []
        for i in range(self.nb_channel):
            color = '#7FFF00'  # TODO
            curve = pg.PlotCurveItem(pen=color)
            self.plot.addItem(curve)
            self.curves.append(curve)
            label = pg.TextItem('TODO name{}'.format(i),
                                color=color,
                                anchor=(0.5, 0.5),
                                border=None,
                                fill=pg.mkColor((128, 128, 128, 200)))
            self.plot.addItem(label)
            self.channel_labels.append(label)

        self.vline = pg.InfiniteLine(pos=0, angle=90, pen='r')
        self.plot.addItem(self.vline)

        self.list_curves = [[] for i in range(self.nb_channel)]

        self.recreate_stack()
        self.reset_curves_data()
Ejemplo n.º 28
0
    def setup(self):

        self.settings.New('spec_index', dtype=int, initial=0)
        self.settings.spec_index.add_listener(self.on_spec_index_change)

        self.ui = QtWidgets.QGroupBox()
        self.ui.setLayout(QtWidgets.QVBoxLayout())

        self.ui.spec_index_doubleSpinBox = QtWidgets.QDoubleSpinBox()
        self.settings.spec_index.connect_bidir_to_widget(
            self.ui.spec_index_doubleSpinBox)
        self.ui.layout().addWidget(self.ui.spec_index_doubleSpinBox)

        self.graph_layout = pg.GraphicsLayoutWidget()
        self.ui.layout().addWidget(self.graph_layout)

        self.power_plot = self.graph_layout.addPlot()
        self.power_plot.setLogMode(x=True, y=True)

        self.power_plotcurve = self.power_plot.plot([1], [1], name='Data')

        self.power_fit_plotcurve = self.power_plot.plot([1], [1],
                                                        pen='r',
                                                        name='Fit')

        self.power_plot_arrow = pg.ArrowItem()
        self.power_plot_arrow.setPos(0, 0)
        self.power_plot.addItem(self.power_plot_arrow)

        self.power_plot_lr = pg.LinearRegionItem([1, 2])
        self.power_plot_lr.setZValue(-10)
        self.power_plot.addItem(self.power_plot_lr)
        self.power_plot_lr.sigRegionChanged.connect(self.redo_fit)

        #self.power_plot_legend = pg.LegendItem()
        #self.power_plot.addItem(self.power_plot_legend)
        #self.power_plot_legend.addItem(self.power_plotcurve)
        #self.power_plot_legend.addItem(self.power_fit_plotcurve)
        self.fit_text = pg.TextItem("fit")
        self.fit_text.setParentItem(self.power_plot_lr, )

        self.graph_layout.nextRow()

        self.spec_plot = self.graph_layout.addPlot()
        self.spec_plotcurve = self.spec_plot.plot([0])
Ejemplo n.º 29
0
 def set_data(self, in_array_data):
     items = self.view.allChildren()
     for i in range(len(items)):
         if i >= self.item_number - 1:
             self.view.removeItem(items[i])
     frame = abs(in_array_data)
     self.item.setImage(frame, autoLevels=True)
     self.item.setRect(
         QRectF(self.Vmin, self.Rmin, self.VRange, self.RRange))
     frame = (abs(in_array_data) - 2 * self.noize) * np.heaviside(
         (abs(in_array_data) - 2 * self.noize), 0)
     #frame = frame.astype(int)
     frame = ndimage.binary_opening(frame, structure=np.ones(
         (3, 3))).astype(int)
     labeled_array, lab_num = ndimage.label(frame)
     pos = []
     symbols = []
     sizes = []
     rects = []
     texts = []
     for i in range(lab_num):
         (xcm,
          ycm) = (ndimage.measurements.center_of_mass(labeled_array == i +
                                                      1))
         xcm = xcm * (self.VRange / self.xdim) + self.Vmin
         ycm = ycm * (self.RRange / self.ydim) + self.Rmin
         slices = ndimage.find_objects(labeled_array == i + 1)
         pos.append([xcm, ycm])
         rect = self.rect_from_tuple(slices[0])
         rect = QtGui.QGraphicsRectItem(rect)
         rect.setPen(pg.mkPen(100, 200, 100))
         self.view.addItem(rect)
         text = 'target %s\n V=%3d R=%3d' % (i, xcm, ycm)
         text = pg.TextItem(text)
         self.view.addItem(text)
         text.setPos(xcm, slices[0][1].start * (self.RRange / self.ydim))
         #symbols.append('s')
         #sizes.append(self.val_from_slice(slices[0]))
         #texts.append('target %s\n V=%3d R=%3d' % (i, xcm, ycm))
     pos = np.asarray(pos)
     self.mass_centers.setData(pos=pos,
                               symbolPen=(255, 0, 0, 255),
                               symbolBrush=(255, 0, 0, 255),
                               size=20,
                               symbol='x')
Ejemplo n.º 30
0
    def scatterAddition(self, x, y):
        """
        此处将clicked定义为内部函数,是为了将传入参数pgPlot与其绑定
        每个通过scatterAddition加入scatter的pgPlot都会保存一份自己的clicked函数
        而clicked处理的是传入的参数pgPlot
        """
        scatterPrice = pg.ScatterPlotItem(size=5,
                                          pen=pg.mkPen(None),
                                          pxMode=True,
                                          brush=pg.mkBrush(255, 255, 255, 120))
        spots = [{'pos': (x, price)} for x, price in zip(x, y)]
        scatterPrice.addPoints(spots)
        self.addItem(scatterPrice)

        self.scatterInfo = pg.TextItem("test")  ## Make all plots clickable
        self.addItem(self.scatterInfo)

        self.lastClicked = []

        def clicked(plot, points):
            if (len(points) > 0):
                mousePoint = points[0].pos()
                self.scatterInfo.setHtml(
                    '<div style="text-align: center">\
                        <span style="color: red; font-size: 10pt;">\
                            %s\
                        </span>\
                        <br>\
                        <span style="color: red; font-size: 10pt;">\
                            %.3f\
                        </span>\
                    </div>'\
                % (dt.datetime.strftime(mpd.num2date(mousePoint.x()).astimezone(pytz.timezone('utc')),'%Y-%m-%d %H:%M:%S%Z'),
                   mousePoint.y()
                ))
                xAxis = mousePoint.x()
                yAxis = mousePoint.y()
                self.scatterInfo.setPos(xAxis, yAxis)
            for p in self.lastClicked:
                p.resetPen()
            for p in points:
                p.setPen('b', width=2)
            self.lastClicked = points

        scatterPrice.sigClicked.connect(clicked)