title: Matplotlib with PyQt5
body: <p>I want to read data and plot dynamic graph,
  so I learn matplotlib with PyQt5.
  I find example but it's for PyQt4, <a href="http://hyry.dip.jp/tech/code/code.html/16" rel="nofollow noreferrer">there</a>
  I modify it to PyQt5 but it had some problem,
  when I click start button it says error</p>
  
  <pre><code>Traceback (most recent call last):   File                                                                                                                                   
  "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/backend_bases.py",                                                                
  line 1305, in _on_timer                                                                                                                                                     
      ret = func(*args, **kwargs)   File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py",                             
  line 1049, in _step                                                                                                                                                         
      still_going = Animation._step(self, *args)   File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py",              
  line 855, in _step                                                                                                                                                          
      self._draw_next_frame(framedata, self._blit)   File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py",            
  line 873, in _draw_next_frame                                                                                                                                               
      self._pre_draw(framedata, blit)   File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py",                         
  line 886, in _pre_draw                                                                                                                                                      
      self._blit_clear(self._drawn_artists, self._blit_cache)   File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py", 
  line 926, in _blit_clear                                                                                                                                                    
      a.figure.canvas.restore_region(bg_cache[a]) KeyError: matplotlib.axes._subplots.AxesSubplot object at 0x1067718d0                                                       
  </code></pre>
  
  <p>This is my code:</p>
  
  <pre><code>import sys, os, random
  from PyQt5 import QtCore
  from PyQt5.QtWidgets import *
  
  import numpy as np
  from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
  from matplotlib.figure import Figure
  import matplotlib.animation as animation
  
  class MyMplCanvas(FigureCanvas):
      """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
      def __init__(self, parent=None, width=5, height=4, dpi=100):
          fig = Figure(figsize=(width, height), dpi=dpi)
          self.axes = fig.add_subplot(111)
          # We want the axes cleared every time plot() is called
          self.axes.hold(False)
  
          self.compute_initial_figure()
  
          #
          FigureCanvas.__init__(self, fig)
          self.setParent(parent)
  
      def compute_initial_figure(self):
          pass
  
  class AnimationWidget(QWidget):
      def __init__(self):
          QMainWindow.__init__(self)
  
          vbox = QVBoxLayout()
          self.canvas = MyMplCanvas(self, width=5, height=4, dpi=100)
          vbox.addWidget(self.canvas)
  
          hbox = QHBoxLayout()
          self.start_button = QPushButton("start", self)
          self.stop_button = QPushButton("stop", self)
          self.start_button.clicked.connect(self.on_start)
          self.stop_button.clicked.connect(self.on_stop)
          hbox.addWidget(self.start_button)
          hbox.addWidget(self.stop_button)
          vbox.addLayout(hbox)
          self.setLayout(vbox)
  
          self.x = np.linspace(0, 5*np.pi, 400)
          self.p = 0.0
          self.y = np.sin(self.x + self.p)
          self.line, = self.canvas.axes.plot(self.x, self.y, animated=True, lw=2)
  
  
  
  
      def update_line(self, i):
          self.p += 0.1
          y = np.sin(self.x + self.p)
          self.line.set_ydata(y)
          return [self.line]
  
      def on_start(self):
          self.ani = animation.FuncAnimation(self.canvas.figure, self.update_line,
                                   blit=True, interval=25)
  
      def on_stop(self):
          self.ani._stop()
  
  
  
  if __name__ == "__main__":
      qApp = QApplication(sys.argv)
      aw = AnimationWidget()
      aw.show()
      sys.exit(qApp.exec_())
  </code></pre>