Plotting real time data with PyQt

时间:2017-04-06 16:53:39

标签: python matplotlib pyqt4

So I'm trying to plot real time data with PyQt. I have it working in a sense, but matplotlib seems to be slowing it down a lot. If I reduce the number of plots I can get the sample rate I want. I have two timer events, one that gathers data and another that plots, with a ratio of 10 to 1.

Searching for a fix I found about Blitting with Matplotlib from SO, and was led to tutorials like this. The problem I'm seeing is that this is only dealing with the plotting part. Every attempt I have made at sampling and plotting a portion of the data I've gathered ends in a crash.

So an outline of what I'd like to do would be this

class graph(ParentMplCanvas):
   def __init__(self, *args, **kwargs):
      self.axes = fig.add_subplot(111)
      self.x    = range(1000)
      self.data = np.zeros(1000)
      #set timer for data to be sampled once every 10ms.
      self.updateData()
      self.line, = self.ax.plot(self.x,self.data, animated=True)
      # Update the plot every second
      self.gTimer = fig.canvas.new_timer(interval=1000)
      self.gTimer.add_callback(self.update_figure)
      self.gtimer.start()

   def updateData(self):
      self.i += 1
      #append with 0's if self.i > 1000
      self.data[self.i] = self.funcToGrabCurrentValFromDevice()
      self.updateTimer()
   def updateTimer(self):
      self.dTimer = Timer(0.01,updateData)
      self.dTimer.start()

class ApplicationWindow(gui.QMainWindow):
   some stuff to call docked windows and the above graph in a docked window see [how I did it here][2]

Maybe I am just not understanding the blitting, but everything I'm seeing there they already have all the data. Any time I've tried to just access a portion of the data it seems to crash the program. I'm trying to just plot a 100 sample region at a time and have it continuously update.

Where I am lost:

How do I properly write update_figure so that I can plot the last 100 (or n) data points that were sampled?

0 个答案:

没有答案