2017-03-19 18 views
0

Matplotlibプロットが埋め込まれたPyQt4 GUIがあります。プロットにCursorウィジェット(much like this example、私にとってはうまくいく)を追加したいと思います。何らかの理由で、カーソルが埋め込まれたプロットに表示されません。どうしたの?matplotlibの使用GUI埋め込みプロットのカーソルウィジェット

以下は最小(非)動作例です。 matplotlib.widgets.Cursor documentationから

import sys 
from PyQt4 import QtGui 

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Cursor 

import random 

class Window(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Window, self).__init__(parent) 

     plt.style.use('ggplot') 
     self.figure = plt.figure() 
     self.canvas = FigureCanvas(self.figure) 

     self.toolbar = NavigationToolbar(self.canvas, self) 
     #self.toolbar.hide() 

     # Just some button 
     self.button = QtGui.QPushButton('Plot') 
     self.button.clicked.connect(self.plot) 

     # set the layout 
     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.toolbar) 
     layout.addWidget(self.canvas) 
     layout.addWidget(self.button) 
     self.setLayout(layout) 

    def plot(self): 
     ''' plot some random stuff ''' 
     data = [random.random() for i in range(25)] 
     ax = self.figure.add_subplot(111) 
     ax.hold(False) 
     ax.plot(data, '*-') 
     Cursor(ax, lw = 2) 
     self.canvas.draw() 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 

    main = Window() 
    main.setWindowTitle('Simple QTpy and MatplotLib example with Zoom/Pan') 
    main.show() 

    sys.exit(app.exec_()) 

答えて

2

:あなたはそれへの参照を保持しなければならない応答ままにカーソルについては

これを行う最も簡単な方法は、クラス変数self.cursor=Cursor(..)に割り当てることです。

def plot(self): 
    ''' plot some random stuff ''' 
    data = [random.random() for i in range(25)] 
    ax = self.figure.add_subplot(111) 
    #ax.hold(False) <- don't use ax.hold! 
    ax.plot(data, '*-') 
    self.cursor = Cursor(ax, lw = 2) 
    self.canvas.draw() 
関連する問題