Пример #1
0
    def __init__(self, node):
        #QtGui.QGraphicsItem.__init__(self)
        GraphicsObject.__init__(self)
        #QObjectWorkaround.__init__(self)
        
        #self.shadow = QtGui.QGraphicsDropShadowEffect()
        #self.shadow.setOffset(5,5)
        #self.shadow.setBlurRadius(10)
        #self.setGraphicsEffect(self.shadow)
        
        self.pen = fn.mkPen(0,0,0)
        self.selectPen = fn.mkPen(200,200,200,width=2)
        self.brush = fn.mkBrush(200, 200, 200, 150)
        self.hoverBrush = fn.mkBrush(200, 200, 200, 200)
        self.selectBrush = fn.mkBrush(200, 200, 255, 200)
        self.hovered = False
        
        self.node = node
        flags = self.ItemIsMovable | self.ItemIsSelectable | self.ItemIsFocusable |self.ItemSendsGeometryChanges
        #flags =  self.ItemIsFocusable |self.ItemSendsGeometryChanges

        self.setFlags(flags)
        self.bounds = QtCore.QRectF(0, 0, 100, 100)
        self.nameItem = QtGui.QGraphicsTextItem(self.node.name(), self)
        self.nameItem.setDefaultTextColor(QtGui.QColor(50, 50, 50))
        self.nameItem.moveBy(self.bounds.width()/2. - self.nameItem.boundingRect().width()/2., 0)
        self.nameItem.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction)
        self.updateTerminals()
        #self.setZValue(10)

        self.nameItem.focusOutEvent = self.labelFocusOut
        self.nameItem.keyPressEvent = self.labelKeyPress
        
        self.menu = None
        self.buildMenu()
 def paint(self, p, *args):
     opts = self.opts
     if opts.get('antialias', True):
         p.setRenderHint(p.Antialiasing)
     
     if opts.get('fillLevel', None) is not None and opts.get('fillBrush', None) is not None:
         p.setBrush(fn.mkBrush(opts['fillBrush']))
         p.setPen(fn.mkPen(None))
         p.drawPolygon(QtGui.QPolygonF([
             QtCore.QPointF(2, 18), 
             QtCore.QPointF(18, 2), 
             QtCore.QPointF(18, 18)]))
     
     if opts.get('pen', None) is not None:
         p.setPen(fn.mkPen(opts['pen']))
         p.drawLine(2, 18, 18, 2)
     
     symbol = opts.get('symbol', None)
     if symbol is not None:
             
         pen = fn.mkPen(opts.get('symbolPen', None))
         brush = fn.mkBrush(opts.get('symbolBrush', None))
         size = opts.get('symbolSize', 10)
         
         p.translate(10,10)
         path = drawSymbol(p, symbol, size, pen, brush)
Пример #3
0
 def process(self, In):
     kwargs = self.CW().prepareInputArguments()
     if kwargs['closed']:
         self.graphicsItem().setBrush(fn.mkBrush(self.closed_color))
         return {'Out': None}
     else:
         self.graphicsItem().setBrush(fn.mkBrush(self.opened_color))
         return {'Out': In}
Пример #4
0
 def paintEvent(self, ev):
     QtGui.QPushButton.paintEvent(self, ev)
     p = QtGui.QPainter(self)
     rect = self.rect().adjusted(6, 6, -6, -6)
     ## draw white base, then texture for indicating transparency, then actual color
     p.setBrush(functions.mkBrush('w'))
     p.drawRect(rect)
     p.setBrush(QtGui.QBrush(QtCore.Qt.DiagCrossPattern))
     p.drawRect(rect)
     p.setBrush(functions.mkBrush(self._color))
     p.drawRect(rect)
     p.end()
Пример #5
0
 def setBrush(self, *args, **kargs):
     if len(args) == 1 and (isinstance(args[0], np.ndarray) or isinstance(args[0], list)):
         brushes = args[0]
         if self.data is None:
             raise Exception("Must set data before setting multiple brushes.")
         if len(brushes) != len(self.data):
             raise Exception("Number of brushes does not match number of points (%d != %d)" % (len(brushes), len(self.data)))
         for i in xrange(len(brushes)):
             self.data[i]['brush'] = fn.mkBrush(brushes[i], **kargs)
     else:
         self.opts['brush'] = fn.mkBrush(*args, **kargs)
     self.updateSpots()
Пример #6
0
 def setSymbolBrush(self, *args, **kargs):
     brush = fn.mkBrush(*args, **kargs)
     if self.opts['symbolBrush'] == brush:
         return
     self.opts['symbolBrush'] = brush
     #self.scatter.setSymbolBrush(brush)
     self.updateItems()
Пример #7
0
 def hoverEvent(self, ev):
     if not ev.isExit() and ev.acceptDrags(QtCore.Qt.LeftButton):
         ev.acceptClicks(QtCore.Qt.LeftButton) ## we don't use the click, but we also don't want anyone else to use it.
         self.box.setBrush(fn.mkBrush('w'))
     else:
         self.box.setBrush(self.brush)
     self.update()
Пример #8
0
 def __init__(self, parent=None, useOpenGL=None, background='k'):
     """Re-implementation of QGraphicsView that removes scrollbars and allows unambiguous control of the 
     viewed coordinate range. Also automatically creates a QGraphicsScene and a central QGraphicsWidget
     that is automatically scaled to the full view geometry.
     
     By default, the view coordinate system matches the widget's pixel coordinates and 
     automatically updates when the view is resized. This can be overridden by setting 
     autoPixelRange=False. The exact visible range can be set with setRange().
     
     The view can be panned using the middle mouse button and scaled using the right mouse button if
     enabled via enableMouse()  (but ordinarily, we use ViewBox for this functionality)."""
     self.closed = False
     
     QtGui.QGraphicsView.__init__(self, parent)
     
     if useOpenGL is None:
         useOpenGL = pyqtgraph.getConfigOption('useOpenGL')
     
     self.useOpenGL(useOpenGL)
     
     self.setCacheMode(self.CacheBackground)
     
     if background is not None:
         brush = fn.mkBrush(background)
         self.setBackgroundBrush(brush)
     
     self.setFocusPolicy(QtCore.Qt.StrongFocus)
     self.setFrameShape(QtGui.QFrame.NoFrame)
     self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
     self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
     self.setTransformationAnchor(QtGui.QGraphicsView.NoAnchor)
     self.setResizeAnchor(QtGui.QGraphicsView.AnchorViewCenter)
     self.setViewportUpdateMode(QtGui.QGraphicsView.MinimalViewportUpdate)
     
     
     #self.setSceneRect(QtCore.QRectF(-1e10, -1e10, 2e10, 2e10))
     
     self.lockedViewports = []
     self.lastMousePos = None
     self.setMouseTracking(True)
     self.aspectLocked = False
     #self.yInverted = True
     self.range = QtCore.QRectF(0, 0, 1, 1)
     self.autoPixelRange = True
     self.currentItem = None
     self.clearMouse()
     self.updateMatrix()
     self.sceneObj = GraphicsScene()
     self.setScene(self.sceneObj)
     
     ## by default we set up a central widget with a grid layout.
     ## this can be replaced if needed.
     self.centralWidget = None
     self.setCentralItem(QtGui.QGraphicsWidget())
     self.centralLayout = QtGui.QGraphicsGridLayout()
     self.centralWidget.setLayout(self.centralLayout)
     
     self.mouseEnabled = False
     self.scaleCenter = False  ## should scaling center around view center (True) or mouse click (False)
     self.clickAccepted = False
Пример #9
0
 def __init__(self, **opts):
     """
     Arrows can be initialized with any keyword arguments accepted by 
     the setStyle() method.
     """
     QtGui.QGraphicsPathItem.__init__(self, opts.get('parent', None))
     if 'size' in opts:
         opts['headLen'] = opts['size']
     if 'width' in opts:
         opts['headWidth'] = opts['width']
     defOpts = {
         'pxMode': True,
         'angle': -150,   ## If the angle is 0, the arrow points left
         'pos': (0,0),
         'headLen': 20,
         'tipAngle': 25,
         'baseAngle': 0,
         'tailLen': None,
         'tailWidth': 3,
         'pen': (200,200,200),
         'brush': (50,50,200),
     }
     defOpts.update(opts)
     
     self.setStyle(**defOpts)
     
     self.setPen(fn.mkPen(defOpts['pen']))
     self.setBrush(fn.mkBrush(defOpts['brush']))
     
     self.rotate(self.opts['angle'])
     self.moveBy(*self.opts['pos'])
Пример #10
0
 def updateBackground(self):
     bg = self.state['background']
     if bg is None:
         self.background.hide()
     else:
         self.background.show()
         self.background.setBrush(fn.mkBrush(bg))
Пример #11
0
 def __init__(self, size, width=5, color=(100, 100, 255)):
     UIGraphicsItem.__init__(self)
     self.setAcceptedMouseButtons(QtCore.Qt.NoButton)
     
     self.brush = fn.mkBrush(color)
     self.pen = fn.mkPen((0,0,0))
     self._width = width
     self.size = size
Пример #12
0
    def buildAtlas(self):
        # get rendered array for all symbols, keep track of avg/max width
        rendered = {}
        avgWidth = 0.0
        maxWidth = 0
        images = []
        for key, coords in self.symbolMap.items():
            if len(coords) == 0:
                pen = fn.mkPen(color=key[2], width=key[3], style=key[4])
                brush = fn.mkBrush(color=key[5])
                img = renderSymbol(key[0], key[1], pen, brush)
                images.append(img)  ## we only need this to prevent the images being garbage collected immediately
                arr = fn.imageToArray(img, copy=False, transpose=False)
            else:
                (x,y,w,h) = self.symbolMap[key]
                arr = self.atlasData[x:x+w, y:y+w]
            rendered[key] = arr
            w = arr.shape[0]
            avgWidth += w
            maxWidth = max(maxWidth, w)
            
        nSymbols = len(rendered)
        if nSymbols > 0:
            avgWidth /= nSymbols
            width = max(maxWidth, avgWidth * (nSymbols**0.5))
        else:
            avgWidth = 0
            width = 0
        
        # sort symbols by height
        symbols = sorted(rendered.keys(), key=lambda x: rendered[x].shape[1], reverse=True)
        
        self.atlasRows = []

        x = width
        y = 0
        rowheight = 0
        for key in symbols:
            arr = rendered[key]
            w,h = arr.shape[:2]
            if x+w > width:
                y += rowheight
                x = 0
                rowheight = h
                self.atlasRows.append([y, rowheight, 0])
            self.symbolMap[key][:] = x, y, w, h
            x += w
            self.atlasRows[-1][2] = x
        height = y + rowheight

        self.atlasData = np.zeros((width, height, 4), dtype=np.ubyte)
        for key in symbols:
            x, y, w, h = self.symbolMap[key]
            self.atlasData[x:x+w, y:y+h] = rendered[key]
        self.atlas = None
        self.atlasValid = True
Пример #13
0
 def setBackground(self, background):
     """
     Set the background color of the GraphicsView.
     To use the defaults specified py pyqtgraph.setConfigOption, use background='default'.
     To make the background transparent, use background=None.
     """
     self._background = background
     if background == 'default':
         background = pyqtgraph.getConfigOption('background')
     brush = fn.mkBrush(background)
     self.setBackgroundBrush(brush)
Пример #14
0
    def __init__(self, name, parent=None):
        terms = {'coord': {'io': 'in'},
                 'data': {'io': 'in'},
                 'this': {'io': 'out'},
                 'All': {'io': 'out'}}
        super(hydraulicGradientNode, self).__init__(name, terminals=terms)
        self.graphicsItem().setBrush(fn.mkBrush(250, 250, 150, 150))

        self._ctrlWidget = hydraulicGradientNodeCtrlWidget(self)

        self._coords_id = None
Пример #15
0
 def __init__(self, term, parent=None):
     self.term = term
     GraphicsObject.__init__(self, parent)
     self.brush = fn.mkBrush(0, 0, 0)
     self.box = QtGui.QGraphicsRectItem(0, 0, 10, 10, self)
     self.label = QtGui.QGraphicsTextItem(self.term.name(), self)
     self.label.scale(0.7, 0.7)
     self.newConnection = None
     self.setFiltersChildEvents(
         True)  # to pick up mouse events on the rectitem
     self.setZValue(1)
     self.menu = None
Пример #16
0
 def setMouseHover(self, hover):
     ## Inform the item that the mouse is(not) hovering over it
     if self.mouseHovering == hover:
         return
     self.mouseHovering = hover
     if hover:
         c = self.brush.color()
         c.setAlpha(c.alpha() * 2)
         self.currentBrush = fn.mkBrush(c)
     else:
         self.currentBrush = self.brush
     self.update()
Пример #17
0
 def setMouseHover(self, hover):
     # Inform the item that the mouse is(not) hovering over it
     if self.mouseHovering == hover:
         return
     self.mouseHovering = hover
     if hover:
         c = self.brush.color()
         c.setAlpha(c.alpha() * 1)
         self.currentBrush = fn.mkBrush(c)
     else:
         self.currentBrush = self.brush
     self.update()
Пример #18
0
    def display(self, topics, terms, addr, win, **kwargs):
        super().display(topics, terms, addr, win, ScatterWidget, **kwargs)

        if self.widget:
            self.roi = pg.LinearRegionItem(
                (self.values['origin'], self.values['extent']),
                swapMode='sort',
                brush=fn.mkBrush(255, 0, 0, 100))
            self.widget.plot_view.addItem(self.roi)
            self.roi.sigRegionChangeFinished.connect(self.set_values)

        return self.widget
Пример #19
0
    def __init__(self, name, color=(200, 200, 200, 150), ui=None, parent=None, **kwargs):
        self._parent = parent
        kwargs['terminals'] = kwargs.get('terminals', {'In': {'io': 'in'}, 'Out': {'io': 'out'}})
        super(NodeWithCtrlWidget, self).__init__(name, **kwargs)
        logger.debug("about to create node [{0}] of type [{1}]".format(self.name(), self.nodeName))
        self._init_at_first()
        self.graphicsItem().setBrush(fn.mkBrush(color))

        if ui is None:
            ui = getattr(self, 'uiTemplate', [])
        self._ctrlWidget = self._createCtrlWidget(parent=self, ui=ui)
        logger.info("node [{0}] of type [{1}] created".format(self.name(), self.nodeName))
Пример #20
0
def paint(self, p, *args):
    # p.setBrush(QtGui.QBrush())
    # p.setPen(fn.mkPen('r'))
    # p.drawRect(self.boundingRect())
    # p.setRenderHint(p.Antialiasing)  # only if the data is antialiased.
    opts = self.item.opts

    if opts.get('fillLevel', None) is not None and opts.get('fillBrush',
                                                            None) is not None:
        p.setBrush(fn.mkBrush(opts['fillBrush']))
        p.setPen(fn.mkPen(None))
        p.drawPolygon(
            QtGui.QPolygonF([
                QtCore.QPointF(2, 18),
                QtCore.QPointF(18, 2),
                QtCore.QPointF(18, 18)
            ]))

    if not isinstance(self.item, ScatterPlotItem):
        p.setPen(fn.mkPen(opts['pen']))
        p.drawLine(2, 18, 18, 2)

    symbol = opts.get('symbol', None)
    if symbol is not None:
        if isinstance(self.item, PlotDataItem):
            opts = self.item.scatter.opts

        pen = fn.mkPen(opts['pen'])
        brush = fn.mkBrush(opts['brush'])
        size = opts['size']

        size = int(3 * size / 4)
        # save and reset to undo the forced resize that
        # drawSymbol causes
        p.save()
        p.translate(2, 18)
        path = drawSymbol(p, symbol, size, pen, brush)
        p.restore()
        p.translate(18, 2)
        path = drawSymbol(p, symbol, size, pen, brush)
Пример #21
0
def qgo_draw_markers(
    markers: list,
    color: Color,
    p: QtGui.QPainter,
    left: float,
    right: float,
    right_offset: float,
) -> float:
    """Paint markers in ``pg.GraphicsItem`` style by first
    removing the view transform for the painter, drawing the markers
    in scene coords, then restoring the view coords.

    """
    # paint markers in native coordinate system
    orig_tr = p.transform()

    start = orig_tr.map(Point(left, 0))
    end = orig_tr.map(Point(right, 0))
    up = orig_tr.map(Point(left, 1))

    dif = end - start
    # length = Point(dif).length()
    angle = np.arctan2(dif.y(), dif.x()) * 180 / np.pi

    p.resetTransform()

    p.translate(start)
    p.rotate(angle)

    up = up - start
    det = up.x() * dif.y() - dif.x() * up.y()
    p.scale(1, 1 if det > 0 else -1)

    p.setBrush(fn.mkBrush(color))
    # p.setBrush(fn.mkBrush(self.currentPen.color()))
    tr = p.transform()

    sizes = []
    for path, pos, size in markers:
        p.setTransform(tr)

        # XXX: we drop the "scale / %" placement
        # x = length * pos
        x = right_offset

        p.translate(x, 0)
        p.scale(size, size)
        p.drawPath(path)
        sizes.append(size)

    p.setTransform(orig_tr)
    return max(sizes)
Пример #22
0
    def __init__(self, node, brush=None):
        super().__init__()

        self.pen = fn.mkPen(0, 0, 0)
        self.selectPen = fn.mkPen(200, 200, 200, width=2)

        if brush:
            self.brush = brush
        else:
            self.brush = fn.mkBrush(255, 255, 255, 255)

        self.hoverBrush = fn.mkBrush(200, 200, 200, 200)
        self.selectBrush = fn.mkBrush(200, 200, 255, 200)
        self.hovered = False

        self.node = node
        flags = self.ItemIsMovable | self.ItemIsSelectable | self.ItemSendsGeometryChanges

        self.setFlags(flags)
        self.bounds = QtCore.QRectF(0, 0, 100, 100)
        self.nameItem = QtGui.QGraphicsTextItem(self.node.name(), self)
        self.nameItem.setDefaultTextColor(QtGui.QColor(50, 50, 50))
        self.nameItem.moveBy(
            self.bounds.width() / 2. -
            self.nameItem.boundingRect().width() / 2., 0)

        self.updateTerminals()

        self.menu = None
        self.connectedTo = None
        self.enabled = QtGui.QAction("Enabled",
                                     self.menu,
                                     checkable=True,
                                     checked=True)
        self.optional = QtGui.QAction("Optional Inputs",
                                      self.menu,
                                      checkable=True,
                                      checked=False)
        self.buildMenu()
Пример #23
0
    def __init__(self, name, parent=None):
        super(QuickViewNode, self).__init__(name, terminals={'In': {'io': 'in'}})
        self.graphicsItem().setBrush(fn.mkBrush(150, 150, 250, 200))
        self._pandasDataModel   = PandasDataModel(parent=self)
        self._pandasHeaderModel = PandasHeaderModel(parent=self)
        self._ctrlWidget = QuickViewCtrlWidget(self)

        # connect show/hide signals
        self._pandasHeaderModel.row_hidden.connect(self._ctrlWidget.tableView.horizontalHeader().hideSection)  #argumnent [int]
        self._pandasHeaderModel.row_showed.connect(self._ctrlWidget.tableView.horizontalHeader().showSection)  #argumnent [int]
        self._pandasDataModel.modelReset.connect(self._ctrlWidget.update)  #no argument


        self._id = None
Пример #24
0
 def setBackground(self, background):
     """
     Set the background color of the GraphicsView.
     To use the defaults specified py pyqtgraph.setConfigOption, use background='default'.
     To make the background transparent, use background=None.
     """
     self._background = background
     if background == 'default':
         background = pyqtgraph.getConfigOption('background')
     if background is None:
         self.setBackgroundRole(QtGui.QPalette.NoRole)
     else:
         brush = fn.mkBrush(background)
         self.setBackgroundBrush(brush)
Пример #25
0
 def setBackground(self, background):
     """
     Set the background color of the GraphicsView.
     To use the defaults specified py pyqtgraph.setConfigOption, use background='default'.
     To make the background transparent, use background=None.
     """
     self._background = background
     if background == "default":
         background = pyqtgraph.getConfigOption("background")
     if background is None:
         self.setBackgroundRole(QtGui.QPalette.NoRole)
     else:
         brush = fn.mkBrush(background)
         self.setBackgroundBrush(brush)
Пример #26
0
 def mkSpot(self, pos, size, pxMode, brush, pen, data, symbol=None, index=None):
     ## Make and return a SpotItem (or PixmapSpotItem if in pxMode)
     brush = fn.mkBrush(brush)
     pen = fn.mkPen(pen)
     if pxMode:
         img = self.spotPixmap()  ## returns None if not using identical mode
         #item = PixmapSpotItem(size, brush, pen, data, image=img, symbol=symbol, index=index)
         item = SpotItem(size, pxMode, brush, pen, data, symbol=symbol, image=img, index=index)
     else:
         item = SpotItem(size, pxMode, brush, pen, data, symbol=symbol, index=index)
     item.setParentItem(self)
     item.setPos(pos)
     #item.sigClicked.connect(self.pointClicked)
     return item
Пример #27
0
 def mkSpot(self, pos, size, pxMode, brush, pen, data, symbol=None, index=None):
     ## Make and return a SpotItem (or PixmapSpotItem if in pxMode)
     brush = fn.mkBrush(brush)
     pen = fn.mkPen(pen)
     if pxMode:
         img = self.spotPixmap()  ## returns None if not using identical mode
         #item = PixmapSpotItem(size, brush, pen, data, image=img, symbol=symbol, index=index)
         item = SpotItem(size, pxMode, brush, pen, data, symbol=symbol, image=img, index=index)
     else:
         item = SpotItem(size, pxMode, brush, pen, data, symbol=symbol, index=index)
     item.setParentItem(self)
     item.setPos(pos)
     #item.sigClicked.connect(self.pointClicked)
     return item
Пример #28
0
    def __init__(self, node):
        #QtGui.QGraphicsItem.__init__(self)
        GraphicsObject.__init__(self)
        #QObjectWorkaround.__init__(self)

        #self.shadow = QtGui.QGraphicsDropShadowEffect()
        #self.shadow.setOffset(5,5)
        #self.shadow.setBlurRadius(10)
        #self.setGraphicsEffect(self.shadow)

        self.pen = fn.mkPen(0, 0, 0)
        self.selectPen = fn.mkPen(200, 200, 200, width=2)
        self.brush = fn.mkBrush(200, 200, 200, 150)
        self.hoverBrush = fn.mkBrush(200, 200, 200, 200)
        self.selectBrush = fn.mkBrush(200, 200, 255, 200)
        self.hovered = False

        self.node = node
        flags = self.ItemIsMovable | self.ItemIsSelectable | self.ItemIsFocusable | self.ItemSendsGeometryChanges
        #flags =  self.ItemIsFocusable |self.ItemSendsGeometryChanges

        self.setFlags(flags)
        self.bounds = QtCore.QRectF(0, 0, 100, 100)
        self.nameItem = QtGui.QGraphicsTextItem(self.node.name(), self)
        self.nameItem.setDefaultTextColor(QtGui.QColor(50, 50, 50))
        self.nameItem.moveBy(
            self.bounds.width() / 2. -
            self.nameItem.boundingRect().width() / 2., 0)
        self.nameItem.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction)
        self.updateTerminals()
        #self.setZValue(10)

        self.nameItem.focusOutEvent = self.labelFocusOut
        self.nameItem.keyPressEvent = self.labelKeyPress

        self.menu = None
        self.buildMenu()
Пример #29
0
 def getSpotOpts(self, recs, scale=1.0):
     if recs.ndim == 0:
         rec = recs
         symbol = rec['symbol']
         if symbol is None:
             symbol = self.opts['symbol']
         size = rec['size']
         if size < 0:
             size = self.opts['size']
         pen = rec['pen']
         if pen is None:
             pen = self.opts['pen']
         brush = rec['brush']
         if brush is None:
             brush = self.opts['brush']
         return (symbol, size*scale, fn.mkPen(pen), fn.mkBrush(brush))
     else:
         recs = recs.copy()
         recs['symbol'][np.equal(recs['symbol'], None)] = self.opts['symbol']
         recs['size'][np.equal(recs['size'], -1)] = self.opts['size']
         recs['size'] *= scale
         recs['pen'][np.equal(recs['pen'], None)] = fn.mkPen(self.opts['pen'])
         recs['brush'][np.equal(recs['brush'], None)] = fn.mkBrush(self.opts['brush'])
         return recs
    def paint(self, p, *args):
        #p.setRenderHint(p.Antialiasing)  # only if the data is antialiased.
        opts = self.item.opts

        if opts.get('fillLevel',None) is not None and opts.get('fillBrush',None) is not None:
            p.setBrush(fn.mkBrush(opts['fillBrush']))
            p.setPen(fn.mkPen(None))
            p.drawPolygon(QtGui.QPolygonF([QtCore.QPointF(2,18), QtCore.QPointF(18,2), QtCore.QPointF(18,18)]))

        if not isinstance(self.item, ScatterPlotItem):
            p.setPen(fn.mkPen(opts['pen']))
            p.drawLine(2, 10, 18, 10)

        symbol = opts.get('symbol', None)
        if symbol is not None:
            if isinstance(self.item, PlotDataItem):
                opts = self.item.scatter.opts

            pen = fn.mkPen(opts['pen'])
            brush = fn.mkBrush(opts['brush'])
            size = opts['size']

            p.translate(10,10)
            path = drawSymbol(p, symbol, size, pen, brush)
Пример #31
0
 def getSpotOpts(self, recs, scale=1.0):
     if recs.ndim == 0:
         rec = recs
         symbol = rec['symbol']
         if symbol is None:
             symbol = self.opts['symbol']
         size = rec['size']
         if size < 0:
             size = self.opts['size']
         pen = rec['pen']
         if pen is None:
             pen = self.opts['pen']
         brush = rec['brush']
         if brush is None:
             brush = self.opts['brush']
         return (symbol, size*scale, fn.mkPen(pen), fn.mkBrush(brush))
     else:
         recs = recs.copy()
         recs['symbol'][np.equal(recs['symbol'], None)] = self.opts['symbol']
         recs['size'][np.equal(recs['size'], -1)] = self.opts['size']
         recs['size'] *= scale
         recs['pen'][np.equal(recs['pen'], None)] = fn.mkPen(self.opts['pen'])
         recs['brush'][np.equal(recs['brush'], None)] = fn.mkBrush(self.opts['brush'])
         return recs
Пример #32
0
    def plot_complex_event(self, complex_event, line_color=None,
                           brush_color=None,with_text=True):
        '''Plots a single event'''
        name = complex_event['name']
        start = complex_event['start'] / self.scaling_factor
        stop = complex_event['stop'] / self.scaling_factor
        region = labelRegion(name, start, stop, parent=self)

        if line_color is not None:
            for line,color in zip(region.lines,line_color):
                line.setPen(fn.mkPen(color))
        if brush_color is not None:
            region.setBrush(fn.mkBrush(brush_color))
        
        return region
Пример #33
0
 def __init__(self, term, parent=None):
     self.term = term
     #QtGui.QGraphicsItem.__init__(self, parent)
     GraphicsObject.__init__(self, parent)
     self.brush = fn.mkBrush(0,0,0)
     self.box = QtGui.QGraphicsRectItem(0, 0, 10, 10, self)
     self.label = QtGui.QGraphicsTextItem(self.term.name(), self)
     self.label.scale(0.7, 0.7)
     #self.setAcceptHoverEvents(True)
     self.newConnection = None
     self.setFiltersChildEvents(True)  ## to pick up mouse events on the rectitem
     if self.term.isRenamable():
         self.label.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction)
         self.label.focusOutEvent = self.labelFocusOut
         self.label.keyPressEvent = self.labelKeyPress
     self.setZValue(1)
     self.menu = None
Пример #34
0
    def add_marker(
        self,
        path: QtWidgets.QGraphicsPathItem,

    ) -> QtWidgets.QGraphicsPathItem:

        self._marker = path
        self._marker.setPen(self.currentPen)
        self._marker.setBrush(fn.mkBrush(self.currentPen.color()))
        # add path to scene
        self.getViewBox().scene().addItem(path)

        # place to just-left of L1 labels
        rsc = self._chart.pre_l1_xs()[0]
        path.setPos(QPointF(rsc, self.scene_y()))

        return path
Пример #35
0
    def __init__(self, pen='l', brush='s', symbol='o', size=7):
        self.size = size
        self.symbol = symbol

        if isinstance(pen, QtGui.QPen):
            self.pen = pen
        else:
            self.pen = fn.mkPen(pen)

        if isinstance(brush, QtGui.QBrush):
            self.brush = brush
        else:
            self.brush = fn.mkBrush(brush)

        self.pixmap = QtGui.QPixmap(
            renderSymbol(self.symbol, self.size, self.pen, self.brush))
        self.width = self.pixmap.width()
Пример #36
0
 def __init__(self, term, parent=None):
     self.term = term
     #QtGui.QGraphicsItem.__init__(self, parent)
     GraphicsObject.__init__(self, parent)
     self.brush = fn.mkBrush(0, 0, 0)
     self.box = QtGui.QGraphicsRectItem(0, 0, 10, 10, self)
     self.label = QtGui.QGraphicsTextItem(self.term.name(), self)
     self.label.scale(0.7, 0.7)
     #self.setAcceptHoverEvents(True)
     self.newConnection = None
     self.setFiltersChildEvents(
         True)  ## to pick up mouse events on the rectitem
     if self.term.isRenamable():
         self.label.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction)
         self.label.focusOutEvent = self.labelFocusOut
         self.label.keyPressEvent = self.labelKeyPress
     self.setZValue(1)
     self.menu = None
Пример #37
0
    def setStyle(self, **opts):
        self.opts.update(opts)

        opt = dict([
            (k, self.opts[k]) for k in
            ['headLen', 'tipAngle', 'baseAngle', 'tailLen', 'tailWidth']
        ])
        self.path = makeArrowPath(opt['headLen'], opt['tipAngle'],
                                  opt['tailLen'], opt['tailWidth'])
        self.setPath(self.path)

        self.setPen(fn.mkPen(self.opts['pen']))
        self.setBrush(fn.mkBrush(self.opts['brush']))

        if self.opts['pxMode']:
            self.setFlags(self.flags() | self.ItemIgnoresTransformations)
        else:
            self.setFlags(self.flags() & ~self.ItemIgnoresTransformations)
Пример #38
0
    def setStyle(self, **opts):
        """
        Changes the appearance of the arrow.
        All arguments are optional:
        
        ======================  =================================================
        **Keyword Arguments:**
        angle                   Orientation of the arrow in degrees. Default is
                                0; arrow pointing to the left.
        headLen                 Length of the arrow head, from tip to base.
                                default=20
        headWidth               Width of the arrow head at its base.
        tipAngle                Angle of the tip of the arrow in degrees. Smaller
                                values make a 'sharper' arrow. If tipAngle is
                                specified, ot overrides headWidth. default=25
        baseAngle               Angle of the base of the arrow head. Default is
                                0, which means that the base of the arrow head
                                is perpendicular to the arrow tail.
        tailLen                 Length of the arrow tail, measured from the base
                                of the arrow head to the end of the tail. If
                                this value is None, no tail will be drawn.
                                default=None
        tailWidth               Width of the tail. default=3
        pen                     The pen used to draw the outline of the arrow.
        brush                   The brush used to fill the arrow.
        ======================  =================================================
        """
        self.opts.update(opts)
        
        opt = dict([(k,self.opts[k]) for k in ['headLen', 'tipAngle', 'baseAngle', 'tailLen', 'tailWidth']])
        tr = QtGui.QTransform()
        tr.rotate(self.opts['angle'])
        self.path = tr.map(fn.makeArrowPath(**opt))

        self.setPath(self.path)
        
        self.setPen(fn.mkPen(self.opts['pen']))
        self.setBrush(fn.mkBrush(self.opts['brush']))
        
        if self.opts['pxMode']:
            self.setFlags(self.flags() | self.ItemIgnoresTransformations)
        else:
            self.setFlags(self.flags() & ~self.ItemIgnoresTransformations)
Пример #39
0
    def __init__(
        self,
        viewbox: ViewBox,
        color: str = 'dad_blue',
    ) -> None:
        super().__init__(0, 0, 1, 1)

        # self.rbScaleBox = QtGui.QGraphicsRectItem(0, 0, 1, 1)
        self.vb = viewbox
        self._chart: 'ChartPlotWidget' = None  # noqa

        # override selection box color
        color = QtGui.QColor(hcolor(color))
        self.setPen(fn.mkPen(color, width=1))
        color.setAlpha(66)
        self.setBrush(fn.mkBrush(color))
        self.setZValue(1e9)
        self.hide()
        self._label = None

        label = self._label = QtGui.QLabel()
        label.setTextFormat(0)  # markdown
        label.setFont(_font.font)
        label.setMargin(0)
        label.setAlignment(
            QtCore.Qt.AlignLeft
            # | QtCore.Qt.AlignVCenter
        )

        # proxy is created after containing scene is initialized
        self._label_proxy = None
        self._abs_top_right = None

        # TODO: "swing %" might be handy here (data's max/min # % change)
        self._contents = [
            'change: {pchng:.2f} %',
            'range: {rng:.2f}',
            'bars: {nbars}',
            'max: {dmx}',
            'min: {dmn}',
            # 'time: {nbars}m',  # TODO: compute this per bar size
            'sigma: {std:.2f}',
        ]
Пример #40
0
 def getArrayRegion(self, data, img, axes=(0,1), returnMappedCoords=False, **kwds):
     sl = self.getArraySlice(data, img, axes=(0,1))
     if sl is None:
         return None
     sliced = data[sl[0]]
     im = QtGui.QImage(sliced.shape[axes[0]], sliced.shape[axes[1]], QtGui.QImage.Format_ARGB32)
     im.fill(0x0)
     p = QtGui.QPainter(im)
     p.setPen(fn.mkPen(None))
     p.setBrush(fn.mkBrush('w'))
     p.setTransform(self.itemTransform(img)[0])
     bounds = self.mapRectToItem(img, self.boundingRect())
     p.translate(-bounds.left(), -bounds.top()) 
     p.drawPath(self.shape())
     p.end()
     mask = imageToArray(im)[:,:,0].astype(float) / 255.
     shape = [1] * data.ndim
     shape[axes[0]] = sliced.shape[axes[0]]
     shape[axes[1]] = sliced.shape[axes[1]]
     return sliced * mask.reshape(shape)  
Пример #41
0
 def __init__(self, size, width=5, brush=None, pen=None, suffix='m'):
     GraphicsObject.__init__(self)
     GraphicsWidgetAnchor.__init__(self)
     self.setFlag(self.ItemHasNoContents)
     self.setAcceptedMouseButtons(QtCore.Qt.NoButton)
     
     if brush is None:
         brush = pg.getConfigOption('foreground')
     self.brush = fn.mkBrush(brush)
     self.pen = fn.mkPen(pen)
     self._width = width
     self.size = size
     
     self.bar = QtGui.QGraphicsRectItem()
     self.bar.setPen(self.pen)
     self.bar.setBrush(self.brush)
     self.bar.setParentItem(self)
     
     self.text = TextItem(text=fn.siFormat(size, suffix=suffix), anchor=(0.5,1))
     self.text.setParentItem(self)
Пример #42
0
    def setStyle(self, **opts):
        # http://www.pyqtgraph.org/documentation/_modules/pyqtgraph/graphicsItems/ArrowItem.html#ArrowItem.setStyle
        self.opts.update(opts)

        opt = dict([(k,self.opts[k]) for k in ['headLen', 'tipAngle', 'baseAngle', 'tailLen', 'tailWidth']])
        tr = QtGui.QTransform()
        path = fn.makeArrowPath(**opt)
        tr.rotate(self.opts['angle'])
        p = -path.boundingRect().center()
        tr.translate(p.x(), p.y())
        self.path = tr.map(path)
        self.setPath(self.path)

        self.setPen(fn.mkPen(self.opts['pen']))
        self.setBrush(fn.mkBrush(self.opts['brush']))

        if self.opts['pxMode']:
            self.setFlags(self.flags() | self.ItemIgnoresTransformations)
        else:
            self.setFlags(self.flags() & ~self.ItemIgnoresTransformations)
Пример #43
0
    def __init__(self, name, parent=None):
        super(QuickViewNode, self).__init__(name,
                                            terminals={'In': {
                                                'io': 'in'
                                            }})
        self.graphicsItem().setBrush(fn.mkBrush(150, 150, 250, 200))
        self._pandasDataModel = PandasDataModel(parent=self)
        self._pandasHeaderModel = PandasHeaderModel(parent=self)
        self._ctrlWidget = QuickViewCtrlWidget(self)

        # connect show/hide signals
        self._pandasHeaderModel.row_hidden.connect(
            self._ctrlWidget.tableView.horizontalHeader(
            ).hideSection)  #argumnent [int]
        self._pandasHeaderModel.row_showed.connect(
            self._ctrlWidget.tableView.horizontalHeader(
            ).showSection)  #argumnent [int]
        self._pandasDataModel.modelReset.connect(
            self._ctrlWidget.update)  #no argument

        self._id = None
Пример #44
0
    def paint(self, p, *args):
        opts = self.item.opts

        if opts['antialias']:
            p.setRenderHint(p.Antialiasing)

        if not isinstance(self.item, ScatterPlotItem):
            p.setPen(fn.mkPen(opts['pen']))
            p.drawLine(-7, 11, 7, 11)

        symbol = opts.get('symbol', None)
        if symbol is not None:
            if isinstance(self.item, PlotDataItem):
                opts = self.item.scatter.opts

            pen = fn.mkPen(opts['pen'])
            brush = fn.mkBrush(opts['brush'])
            size = opts['size']

            p.translate(10, 10)
            path = drawSymbol(p, symbol, size, pen, brush)
Пример #45
0
 def getSymbolCoords(self, opts):
     """
     Given a list of spot records, return an object representing the coordinates of that symbol within the atlas
     """
     coords = np.empty(len(opts), dtype=object)
     for i, rec in enumerate(opts):
         symbol, size, pen, brush = rec['symbol'], rec['size'], rec['pen'], rec['brush']
         pen = fn.mkPen(pen) if not isinstance(pen, QtGui.QPen) else pen
         brush = fn.mkBrush(brush) if not isinstance(pen, QtGui.QBrush) else brush
         key = (symbol, size, fn.colorTuple(pen.color()), pen.widthF(), pen.style(), fn.colorTuple(brush.color()))
         if key not in self.symbolMap:
             newCoords = SymbolAtlas.SymbolCoords()
             self.symbolMap[key] = newCoords
             self.atlasValid = False
             #try:
                 #self.addToAtlas(key)  ## squeeze this into the atlas if there is room
             #except:
                 #self.buildAtlas()  ## otherwise, we need to rebuild
         
         coords[i] = self.symbolMap[key]
     return coords
Пример #46
0
    def __init__(self, name, parent=None):
        terms = {
            'coord': {
                'io': 'in'
            },
            'data': {
                'io': 'in'
            },
            'this': {
                'io': 'out'
            },
            'All': {
                'io': 'out'
            }
        }
        super(hydraulicGradientNode, self).__init__(name, terminals=terms)
        self.graphicsItem().setBrush(fn.mkBrush(250, 250, 150, 150))

        self._ctrlWidget = hydraulicGradientNodeCtrlWidget(self)

        self._coords_id = None
Пример #47
0
 def getSymbolCoords(self, opts):
     """
     Given a list of spot records, return an object representing the coordinates of that symbol within the atlas
     """
     coords = np.empty(len(opts), dtype=object)
     for i, rec in enumerate(opts):
         symbol, size, pen, brush = rec['symbol'], rec['size'], rec['pen'], rec['brush']
         pen = fn.mkPen(pen) if not isinstance(pen, QtGui.QPen) else pen
         brush = fn.mkBrush(brush) if not isinstance(pen, QtGui.QBrush) else brush
         key = (symbol, size, fn.colorTuple(pen.color()), pen.width(), pen.style(), fn.colorTuple(brush.color()))
         if key not in self.symbolMap:
             newCoords = SymbolAtlas.SymbolCoords()
             self.symbolMap[key] = newCoords
             self.atlasValid = False
             #try:
                 #self.addToAtlas(key)  ## squeeze this into the atlas if there is room
             #except:
                 #self.buildAtlas()  ## otherwise, we need to rebuild
         
         coords[i] = self.symbolMap[key]
     return coords
Пример #48
0
    def __init__(self, x, y, line_colour, brush=None, hoverBrush=None):
        pg.GraphicsObject.__init__(self)
        self.blockLineSignal = False
        self.moving = False
        self.mouseHovering = False

        self._boundingRectCache = None

        penBase = pg.mkPen(line_colour)
        h, s, v = penBase.color().hue(), penBase.color().saturation(
        ), penBase.color().value()
        invcol = [((h + 128) % 255) / 255.0, s / 255.0, v / 255.0]
        #
        lineKwds = dict(
            movable=True,
            pen=penBase,
            hoverPen=pg.mkPen(QtGui.QColor.fromHsvF(*invcol)),
        )
        self.lines = [
            pg.InfiniteLine(QtCore.QPointF(x, 0), angle=90, **lineKwds),
            pg.InfiniteLine(QtCore.QPointF(0, y), angle=0, **lineKwds)
        ]
        #
        for l in self.lines:
            l.setParentItem(self)
            l.sigPositionChangeFinished.connect(self.lineMoveFinished)
        self.lines[0].sigPositionChanged.connect(self._line0Moved)
        self.lines[1].sigPositionChanged.connect(self._line1Moved)

        if brush is None:
            brush = QtGui.QBrush(QtGui.QColor(0, 0, 255, 50))
        self.setBrush(brush)

        if hoverBrush is None:
            c = self.brush.color()
            c.setAlpha(min(c.alpha() * 2, 255))
            hoverBrush = fn.mkBrush(c)
        self.setHoverBrush(hoverBrush)

        self.setAcceptHoverEvents(True)
Пример #49
0
 def setBrush(self, *args, **kargs):
     """Set the brush(es) used to fill the interior of each spot. 
     If a list or array is provided, then the brush for each spot will be set separately.
     Otherwise, the arguments are passed to pg.mkBrush and used as the default brush for 
     all spots which do not have a brush explicitly set."""
     update = kargs.pop('update', True)
     dataSet = kargs.pop('dataSet', self.data)
         
     if len(args) == 1 and (isinstance(args[0], np.ndarray) or isinstance(args[0], list)):
         brushes = args[0]
         if len(brushes) != len(dataSet):
             raise Exception("Number of brushes does not match number of points (%d != %d)" % (len(brushes), len(dataSet)))
         #for i in xrange(len(brushes)):
             #self.data[i]['brush'] = fn.mkBrush(brushes[i], **kargs)
         dataSet['brush'] = brushes
     else:
         self.opts['brush'] = fn.mkBrush(*args, **kargs)
         #self._spotPixmap = None
     
     dataSet['fragCoords'] = None
     if update:
         self.updateSpots(dataSet)
Пример #50
0
 def getArrayRegion(self, data, img, axes=(0,1), returnMappedCoords=False, **kwds):
     import pyqtgraph.functions as fn
     sl = self.getArraySlice(data, img, axes=(0,1))
     if sl is None:
         return None
     sliced = data[sl[0]]
     im = QtGui.QImage(sliced.shape[axes[0]], sliced.shape[axes[1]], QtGui.QImage.Format_ARGB32)
     im.fill(0x0)
     p = QtGui.QPainter(im)
     p.setPen(fn.mkPen(None))
     p.setBrush(fn.mkBrush('w'))
     p.setTransform(self.itemTransform(img)[0])
     bounds = self.mapRectToItem(img, self.boundingRect())
     p.translate(-bounds.left(), -bounds.top()) 
     p.drawPath(self.shape())
     p.end()
     
     mask = fn.imageToArray(im)[:,:,0].astype(float) / 255.
     shape = [1] * data.ndim
     shape[axes[0]] = sliced.shape[axes[0]]
     shape[axes[1]] = sliced.shape[axes[1]]
     return sliced, mask.reshape(shape)
Пример #51
0
 def __init__(self, **opts):
     QtGui.QGraphicsPolygonItem.__init__(self, opts.get('parent', None))
     defOpts = {
         'style': 'tri',
         'pxMode': True,
         'size': 20,
         'angle': -150,   ## If the angle is 0, the arrow points left
         'pos': (0,0),
         'width': None,  ## width is automatically size / 2.
         'tipAngle': 25,
         'baseAngle': 90,
         'pen': (200,200,200),
         'brush': (50,50,200),
     }
     defOpts.update(opts)
     
     self.setStyle(**defOpts)
     
     self.setPen(fn.mkPen(defOpts['pen']))
     self.setBrush(fn.mkBrush(defOpts['brush']))
     
     self.rotate(self.opts['angle'])
     self.moveBy(*self.opts['pos'])
Пример #52
0
 def setBrush(self, *args, **kargs):
     """Set the brush(es) used to fill the interior of each spot. 
     If a list or array is provided, then the brush for each spot will be set separately.
     Otherwise, the arguments are passed to pg.mkBrush and used as the default brush for 
     all spots which do not have a brush explicitly set."""
     update = kargs.pop('update', True)
     dataSet = kargs.pop('dataSet', self.data)
         
     if len(args) == 1 and (isinstance(args[0], np.ndarray) or isinstance(args[0], list)):
         brushes = args[0]
         if kargs['mask'] is not None:
             brushes = brushes[kargs['mask']]
         if len(brushes) != len(dataSet):
             raise Exception("Number of brushes does not match number of points (%d != %d)" % (len(brushes), len(dataSet)))
         #for i in xrange(len(brushes)):
             #self.data[i]['brush'] = fn.mkBrush(brushes[i], **kargs)
         dataSet['brush'] = brushes
     else:
         self.opts['brush'] = fn.mkBrush(*args, **kargs)
         #self._spotPixmap = None
     
     dataSet['fragCoords'] = None
     if update:
         self.updateSpots(dataSet)
Пример #53
0
    def paint(self, p, *args):
        profile = debug.Profiler()
        if self.image is None:
            return
        if self.qimage is None:
            self.render()
            if self.qimage is None:
                return
            profile('render QImage')
        if self.paintMode is not None:
            p.setCompositionMode(self.paintMode)
            profile('set comp mode')

        self.setTransform(self.dataTransform())

        for pol, color in zip(self.qimage['polygons'], self.qimage['values']):
            p.setPen(fn.mkPen(255, 255, 255, 100, width=0.75))
            p.setBrush(fn.mkBrush(*color))
            p.drawPolygon(pol)

        profile('p.drawImage')
        if self.border is not None:
            p.setPen(self.border)
            p.drawRect(self.boundingRect())
Пример #54
0
    def updatePlot(self):
        self.plot.clear()
        if self.data is None:
            return
        
        if self.filtered is None:
            self.filtered = self.filter.filterData(self.data)
        data = self.filtered
        if len(data) == 0:
            return
        
        colors = np.array([fn.mkBrush(*x) for x in self.colorMap.map(data)])
        
        style = self.style.copy()
        
        ## Look up selected columns and units
        sel = list([str(item.text()) for item in self.fieldList.selectedItems()])
        units = list([item.opts.get('units', '') for item in self.fieldList.selectedItems()])
        if len(sel) == 0:
            self.plot.setTitle('')
            return
        

        if len(sel) == 1:
            self.plot.setLabels(left=('N', ''), bottom=(sel[0], units[0]), title='')
            if len(data) == 0:
                return
            x = data[sel[0]]
            #if x.dtype.kind == 'f':
                #mask = ~np.isnan(x)
            #else:
                #mask = np.ones(len(x), dtype=bool)
            #x = x[mask]
            #style['symbolBrush'] = colors[mask]
            y = None
        elif len(sel) == 2:
            self.plot.setLabels(left=(sel[1],units[1]), bottom=(sel[0],units[0]))
            if len(data) == 0:
                return
            
            xydata = []
            for ax in [0,1]:
                d = data[sel[ax]]
                ## scatter catecorical values just a bit so they show up better in the scatter plot.
                #if sel[ax] in ['MorphologyBSMean', 'MorphologyTDMean', 'FIType']:
                    #d += np.random.normal(size=len(cells), scale=0.1)
                xydata.append(d)
            x,y = xydata
            #mask = np.ones(len(x), dtype=bool)
            #if x.dtype.kind == 'f':
                #mask |= ~np.isnan(x)
            #if y.dtype.kind == 'f':
                #mask |= ~np.isnan(y)
            #x = x[mask]
            #y = y[mask]
            #style['symbolBrush'] = colors[mask]

        ## convert enum-type fields to float, set axis labels
        xy = [x,y]
        for i in [0,1]:
            axis = self.plot.getAxis(['bottom', 'left'][i])
            if xy[i] is not None and xy[i].dtype.kind in ('S', 'O'):
                vals = self.fields[sel[i]].get('values', list(set(xy[i])))
                xy[i] = np.array([vals.index(x) if x in vals else None for x in xy[i]], dtype=float)
                axis.setTicks([list(enumerate(vals))])
            else:
                axis.setTicks(None)  # reset to automatic ticking
        x,y = xy
        
        ## mask out any nan values
        mask = np.ones(len(x), dtype=bool)
        if x.dtype.kind == 'f':
            mask &= ~np.isnan(x)
        if y is not None and y.dtype.kind == 'f':
            mask &= ~np.isnan(y)
        x = x[mask]
        style['symbolBrush'] = colors[mask]

        ## Scatter y-values for a histogram-like appearance
        if y is None:
            y = fn.pseudoScatter(x)
        else:
            y = y[mask]
                
            
        self.plot.plot(x, y, **style)
Пример #55
0
 def setBrush(self, *args, **kargs):
     """Set the fill brush for this spot"""
     brush = fn.mkBrush(*args, **kargs)
     self._data['brush'] = brush
     self.updateItem()
Пример #56
0
 def paint(self, p, *args):
     if self.box:
         p.setPen(fn.mkPen(255, 255, 255, 100))
         p.setBrush(fn.mkBrush(100, 100, 100, 50))
         p.drawRect(self.boundingRect())
Пример #57
0
 def setBrush(self, *args, **kargs):
     """Set the brush used when filling the area under the curve"""
     self.opts['brush'] = fn.mkBrush(*args, **kargs)
     self.update()