def __init__(self, data=None, figure=None, axes=None, layer_artist_container=None): """ Create a new ScatterClient object :param data: :class:`~glue.core.data.DataCollection` to use :param figure: Which matplotlib figure instance to draw to. One will be created if not provided :param axes: Which matplotlib axes instance to use. Will be created if necessary """ Client.__init__(self, data=data) figure, axes = init_mpl(figure, axes) self.artists = layer_artist_container if self.artists is None: self.artists = LayerArtistContainer() self._layer_updated = False # debugging self._xset = False self._yset = False self.axes = axes self._connect() self._set_limits()
def __init__(self, data, figure, layer_artist_container=None): super(HistogramClient, self).__init__(data) self._artists = layer_artist_container or LayerArtistContainer() self._figure, self._axes = init_mpl(figure=figure, axes=None) self._component = None self._saved_nbins = None self._xlim_cache = {} self._xlog_cache = {} self._sync_enabled = True self._xlog_curr = False
def __init__(self, session, parent=None, wcs=None, state=None): super(MatplotlibDataViewer, self).__init__(session, parent, state=state) # Use MplWidget to set up a Matplotlib canvas inside the Qt window self.mpl_widget = MplWidget() self.setCentralWidget(self.mpl_widget) # TODO: shouldn't have to do this self.central_widget = self.mpl_widget self.figure, self._axes = init_mpl(self.mpl_widget.canvas.fig, wcs=wcs) self.state.add_callback('aspect', self.update_aspect) self.update_aspect() self.state.add_callback('x_min', self.limits_to_mpl) self.state.add_callback('x_max', self.limits_to_mpl) self.state.add_callback('y_min', self.limits_to_mpl) self.state.add_callback('y_max', self.limits_to_mpl) self.limits_to_mpl() self.state.add_callback('x_log', self.update_x_log, priority=1000) self.state.add_callback('y_log', self.update_y_log, priority=1000) self.update_x_log() self.axes.callbacks.connect('xlim_changed', self.limits_from_mpl) self.axes.callbacks.connect('ylim_changed', self.limits_from_mpl) self.axes.set_autoscale_on(False) self.state.add_callback('x_axislabel', self.update_x_axislabel) self.state.add_callback('x_axislabel_weight', self.update_x_axislabel) self.state.add_callback('x_axislabel_size', self.update_x_axislabel) self.state.add_callback('y_axislabel', self.update_y_axislabel) self.state.add_callback('y_axislabel_weight', self.update_y_axislabel) self.state.add_callback('y_axislabel_size', self.update_y_axislabel) self.state.add_callback('x_ticklabel_size', self.update_x_ticklabel) self.state.add_callback('y_ticklabel_size', self.update_y_ticklabel) self.update_x_axislabel() self.update_y_axislabel() self.update_x_ticklabel() self.update_y_ticklabel() self.central_widget.resize(600, 400) self.resize(self.central_widget.size())
def __init__(self, session, parent=None): super(MatplotlibDataViewer, self).__init__(session, parent) # Use MplWidget to set up a Matplotlib canvas inside the Qt window self.mpl_widget = MplWidget() self.setCentralWidget(self.mpl_widget) # TODO: shouldn't have to do this self.central_widget = self.mpl_widget self.figure, self._axes = init_mpl(self.mpl_widget.canvas.fig) # Set up the state which will contain everything needed to represent # the current state of the viewer self.state = self._state_cls() self.state.data_collection = session.data_collection # Set up the options widget, which will include options that control the # viewer state self.options = self._options_cls(viewer_state=self.state, session=session) add_callback(self.state, 'x_min', nonpartial(self.limits_to_mpl)) add_callback(self.state, 'x_max', nonpartial(self.limits_to_mpl)) add_callback(self.state, 'y_min', nonpartial(self.limits_to_mpl)) add_callback(self.state, 'y_max', nonpartial(self.limits_to_mpl)) self.axes.callbacks.connect('xlim_changed', nonpartial(self.limits_from_mpl)) self.axes.callbacks.connect('ylim_changed', nonpartial(self.limits_from_mpl)) self.state.add_callback('x_log', nonpartial(self.update_x_log)) self.state.add_callback('y_log', nonpartial(self.update_y_log)) self.axes.set_autoscale_on(False) # TODO: in future could move the following to a more basic data viewer class # When layer artists are removed from the layer artist container, we need # to make sure we remove matching layer states in the viewer state # layers attribute. self._layer_artist_container.on_changed( nonpartial(self._sync_state_layers)) # And vice-versa when layer states are removed from the viewer state, we # need to keep the layer_artist_container in sync self.state.add_callback('layers', nonpartial(self._sync_layer_artist_container))
def __init__(self, parent=None): super(Line1DWidget, self).__init__(parent) self.figure = plt.figure(facecolor='white') # Canvas Widget that displays the `figure` it takes the `figure` # instance as a parameter to __init__ canvas = FigureCanvas(self.figure) # Double reference; Glue's toolbar abstraction requires that the # central widget of its parent have a reference to the canvas object self.central_widget = canvas self.central_widget.canvas = canvas # Navigation widget, it takes the Canvas widget and a parent self.toolbar = MatplotlibViewerToolbar(self) self.addToolBar(self.toolbar) self.setCentralWidget(self.central_widget) _, self._axes = init_mpl(figure=self.figure) self._artists = []
def __init__(self, session, parent=None, wcs=None, state=None): super(MatplotlibDataViewer, self).__init__(session, parent, state=state) # Use MplWidget to set up a Matplotlib canvas inside the Qt window self.mpl_widget = MplWidget() self.setCentralWidget(self.mpl_widget) # TODO: shouldn't have to do this self.central_widget = self.mpl_widget self.figure, self._axes = init_mpl(self.mpl_widget.canvas.fig, wcs=wcs) self.state.add_callback('aspect', self.update_aspect) self.update_aspect() self.state.add_callback('x_min', nonpartial(self.limits_to_mpl)) self.state.add_callback('x_max', nonpartial(self.limits_to_mpl)) self.state.add_callback('y_min', nonpartial(self.limits_to_mpl)) self.state.add_callback('y_max', nonpartial(self.limits_to_mpl)) self.limits_to_mpl() self.state.add_callback('x_log', nonpartial(self.update_x_log)) self.state.add_callback('y_log', nonpartial(self.update_y_log)) self.update_x_log() self.axes.callbacks.connect('xlim_changed', nonpartial(self.limits_from_mpl)) self.axes.callbacks.connect('ylim_changed', nonpartial(self.limits_from_mpl)) self.axes.set_autoscale_on(False) self.central_widget.resize(600, 400) self.resize(self.central_widget.size())
def _setup_mpl(self, figure, axes): figure, axes = init_mpl(figure, axes, wcs=True) self._axes = axes self._axes.get_xaxis().set_ticks([]) self._axes.get_yaxis().set_ticks([]) self._figure = figure # custom axes formatter def format_coord(x, y): data = self.display_data if data is None: # MPL default method return type(self._axes).format_coord(self._axes, x, y) info = self.point_details(x, y) return ' '.join(info['labels']) self._axes.format_coord = format_coord self._cid = self._axes.figure.canvas.mpl_connect('button_release_event', self.check_update) if hasattr(self._axes.figure.canvas, 'homeButton'): # test code doesn't always use Glue's custom FigureCanvas self._axes.figure.canvas.homeButton.connect(self.check_update)
def _setup_mpl(self, figure, axes): figure, axes = init_mpl(figure, axes, wcs=True) self._axes = axes self._axes.get_xaxis().set_ticks([]) self._axes.get_yaxis().set_ticks([]) self._figure = figure # custom axes formatter def format_coord(x, y): data = self.display_data if data is None: # MPL default method return type(self._axes).format_coord(self._axes, x, y) info = self.point_details(x, y) return ' '.join(info['labels']) self._axes.format_coord = format_coord self._cid = self._axes.figure.canvas.mpl_connect( 'button_release_event', self.check_update) if hasattr(self._axes.figure.canvas, 'homeButton'): # test code doesn't always use Glue's custom FigureCanvas self._axes.figure.canvas.homeButton.connect(self.check_update)
def _setup_axes(self): from glue.viewers.common.viz_client import init_mpl _, self._axes = init_mpl(self.central_widget.canvas.fig, axes=None, wcs=True) self._axes.set_aspect('equal', adjustable='datalim')