Scale invariance isn't a desirable feature in a neuronal raster plot. I tried your method and it works well for me. Thank you.
On Wednesday, May 24, 2017 at 11:45:15 PM UTC-4, Luke Campagnola wrote: > > Nice example, Chad! > There's another possibility--you can draw the ticks as a single > PlotCurveItem using connect='pairs'. I would guess that this is the fastest > option, but the ticks would not be scale-invariant like they are with > ScatterPlotItem (at least, not without a little extra code). > > import pyqtgraph as pg > import numpy as np > > x = np.cumsum(abs(np.random.normal(size=10000))) > x[1::2] = x[::2] > y = np.zeros(len(x)) > y[1::2] = 1 > > plt = pg.plot() > c = pg.PlotCurveItem() > c.setData(x, y, connect='pairs', pen=(255, 255, 255, 100)) > plt.addItem(c) > > > On Tue, May 23, 2017 at 6:18 AM, Chadwick Boulay <[email protected] > <javascript:>> wrote: > >> Hi, I know this post is old but I came across it recently because I was >> trying to make a neural raster plot. >> >> For static plots, VTickGroup worked okay except it had a bug (I made a PR >> here <https://github.com/pyqtgraph/pyqtgraph/pull/485>). However, even >> with the bug fixed, this approach often caused the GUI to crash when I was >> trying to do online updating. I couldn't figure out why. >> >> Instead, I opted to use a ScatterPlotItem with a custom symbol, where the >> symbol was just a QPainterPath with 2 vertically-separated points. This >> works really well for me and I can update it very quickly. Example code is >> below. >> >> -Chad >> >> import sys >> import PyQt5 >> from PyQt5.QtGui import * >> from PyQt5.QtWidgets import * >> from PyQt5.QtCore import * >> import numpy as np >> import pyqtgraph as pg >> >> >> class MyGUI(QMainWindow): >> def __init__(self): >> super(MyGUI, self).__init__() >> self.setup_ui() >> self.show() >> >> def __del__(self): >> pass >> >> def setup_ui(self): >> self.resize(800, 600) >> self.setWindowTitle('Test Raster') >> self.setCentralWidget(QWidget(self)) # This squeezes out docks. >> self.centralWidget().setLayout(QVBoxLayout()) >> >> glw = pg.GraphicsLayoutWidget() >> glw.useOpenGL(True) >> self.centralWidget().layout().addWidget(glw) >> >> vtick = QPainterPath() >> vtick.moveTo(0, -0.5) >> vtick.lineTo(0, 0.5) >> >> p1 = glw.addPlot(row=0, col=0) >> p1.setXRange(-0.05, 1.05) >> p1.hideAxis('bottom') >> >> s1 = pg.ScatterPlotItem(pxMode=False) >> s1.setSymbol(vtick) >> s1.setSize(1) >> s1.setPen(QColor(*np.random.randint(0, 255 + 1, 3).tolist())) >> p1.addItem(s1) >> >> s2 = pg.ScatterPlotItem(pxMode=False, symbol=vtick, size=1, >> pen=QColor(*np.random.randint(0, 255 + 1, >> 3).tolist())) >> p1.addItem(s2) >> >> self.spis = [s1, s2] >> >> def update(self): >> super(MyGUI, self).update() >> for spi_ix in range(len(self.spis)): >> self.spis[spi_ix].setData(np.random.rand(10), spi_ix + 0.5 + >> np.zeros((10,))) >> >> >> if __name__ == '__main__': >> qapp = QApplication(sys.argv) >> aw = MyGUI() >> timer = QTimer() >> timer.timeout.connect(aw.update) >> timer.start(1) >> >> if (sys.flags.interactive != 1) or not hasattr(PyQt5.QtCore, >> 'PYQT_VERSION'): >> QApplication.instance().exec_() >> >> >> >> >> >> On Friday, February 7, 2014 at 2:25:15 PM UTC-5, Peter Malonis wrote: >>> >>> Thanks. The GraphItem works much better. >>> >>> >>> On Thu, Feb 6, 2014 at 6:01 PM, Luke Campagnola <[email protected]> >>> wrote: >>> >>>> On Thu, Feb 6, 2014 at 4:47 PM, Peter Malonis <[email protected]> >>>> wrote: >>>> >>>>> Hello, >>>>> >>>>> I'm attempting to use pyqtgraph to create a raster plot, which is a >>>>> plot of event times each represented by a vertical line. Here's an >>>>> example: >>>>> [image: an example of a matplotlib raster plot] >>>>> The first thing I tried was to make a separate PlotDataItem for each >>>>> line. However, once the number of lines reaches around 1000, the >>>>> plotting >>>>> is extremely slow or doesn't work at all. Then I tried making an >>>>> ImageItem >>>>> for the whole plot. The problem with this is that the width of each line >>>>> depends on the zoom, including whether lines appear at all. I suppose I >>>>> could create a class which adjusts the width of the lines in the image >>>>> depending on the range of the view box, but I'm wondering if there's not >>>>> a >>>>> simpler way to do this, or if you have any advice in general. >>>>> >>>>> >>>> Hi Peter, >>>> >>>> I have two pointers for you: >>>> 1) Use a single GraphItem to draw many disconnected line segments; >>>> you'll get much better performance. >>>> 2) Have a look at the VTickGroup item; it does almost what you need, >>>> but always maintains the vertical tick position relative to the view >>>> boundaries (it is used for marking event times along a plot curve). >>>> >>>> -- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "pyqtgraph" group. >>>> To unsubscribe from this topic, visit >>>> https://groups.google.com/d/topic/pyqtgraph/O9kTFQ3IRjc/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/pyqtgraph/CACZXET-XEuAuj4XO%2Bt1EgTe9WFBJn%2BPtA3nq583ZFiA4cbA-jA%40mail.gmail.com >>>> . >>>> >>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "pyqtgraph" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/pyqtgraph/380a87fd-7c41-47b4-9edc-d1ac1efa1eda%40googlegroups.com >> >> <https://groups.google.com/d/msgid/pyqtgraph/380a87fd-7c41-47b4-9edc-d1ac1efa1eda%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "pyqtgraph" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/pyqtgraph/cb90d6ef-9d92-4f22-93f6-38d6e3125d23%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
