Source code for spacepy.pybats.interact

#!/usr/bin/env python
'''
Tools for creating interactive PyBats GUIs.
'''

[docs] class ClickTracer(object): ''' ClickTracers, given an axis containing a 2D plot and the pybats.bats.Bats2d object used to create it, allows the user to click to add a streamline passing through the point clicked. '''
[docs] def __init__(self, ax, bats, xfield, yfield, debug=False): # Check arguments. assert type(ax).__module__ == 'matplotlib.axes', \ 'First argument must be a matplotlib.axes.Axes (sub)object.' assert type(bats).__name__ == 'Bats2d', \ '2nd argument must be a Bats2d object.' self.bats = bats self.ax = ax self.xfield = xfield self.yfield = yfield self.debug = debug self.connected = False self.connect()
def _do_trace(self, event, **kwargs): if event.inaxes != self.ax: return if self.debug: print('click at %.3f, %.3f' % (event.xdata, event.ydata)) stream = self.bats.get_stream(event.xdata, event.ydata, self.xfield, self.yfield) ylims = self.ax.get_ylim() xlims = self.ax.get_xlim() self.nowline = stream.plot(self.ax, alpha=0.25) self.ax.set_ylim(ylims) self.ax.set_xlim(xlims) self.ax.figure.canvas.draw()
[docs] def connect(self): ''' Activate trace-on-click. ''' if self.connected: return self.cid = self.ax.figure.canvas.mpl_connect( 'button_press_event',self._do_trace) #self.kid = self self.connected = True
[docs] def disconnect(self): ''' Deactivate trace-on-click. ''' if not self.connected: return self.ax.figure.canvas.mpl_disconnect(self.cid) self.connected = False