Source code for glue_jupyter.bqplot.image.viewer

import bqplot

from glue.viewers.image.state import ImageViewerState
from glue.viewers.image.composite_array import CompositeArray

from ...link import on_change

from ..common.viewer import BqplotBaseView
from ..scatter.layer_artist import BqplotScatterLayerArtist

from .layer_artist import BqplotImageLayerArtist, BqplotImageSubsetLayerArtist
from .frb_mark import FRBImage

from glue_jupyter.common.state_widgets.layer_scatter import ScatterLayerStateWidget
from glue_jupyter.common.state_widgets.layer_image import (ImageLayerStateWidget,
                                                           ImageSubsetLayerStateWidget)
from glue_jupyter.common.state_widgets.viewer_image import ImageViewerStateWidget

__all__ = ['BqplotImageView']


[docs]class BqplotImageView(BqplotBaseView): allow_duplicate_data = False allow_duplicate_subset = False large_data_size = 2e7 _layer_style_widget_cls = {BqplotImageLayerArtist: ImageLayerStateWidget, BqplotImageSubsetLayerArtist: ImageSubsetLayerStateWidget, BqplotScatterLayerArtist: ScatterLayerStateWidget} _state_cls = ImageViewerState _options_cls = ImageViewerStateWidget tools = ['bqplot:panzoom', 'bqplot:rectangle', 'bqplot:xrange', 'bqplot:yrange'] def __init__(self, session): super(BqplotImageView, self).__init__(session) on_change([(self.state, 'aspect')])(self._sync_figure_aspect) self._sync_figure_aspect() self._composite = CompositeArray() self._composite_image = FRBImage(self, self._composite) self.figure.marks = list(self.figure.marks) + [self._composite_image] self.state.add_callback('reference_data', self._reset_limits) self.state.add_callback('x_att', self._reset_limits) self.state.add_callback('y_att', self._reset_limits) def _reset_limits(self, *args): self.state.reset_limits() def _sync_figure_aspect(self): with self.figure.hold_trait_notifications(): if self.state.aspect == 'equal': self.figure.max_aspect_ratio = 1 self.figure.min_aspect_ratio = 1 else: self.figure.min_aspect_ratio = bqplot.Figure.min_aspect_ratio.default_value self.figure.max_aspect_ratio = bqplot.Figure.max_aspect_ratio.default_value
[docs] def get_data_layer_artist(self, layer=None, layer_state=None): if layer.ndim == 1: cls = BqplotScatterLayerArtist else: cls = BqplotImageLayerArtist return self.get_layer_artist(cls, layer=layer, layer_state=layer_state)
[docs] def get_subset_layer_artist(self, layer=None, layer_state=None): if layer.ndim == 1: cls = BqplotScatterLayerArtist else: cls = BqplotImageSubsetLayerArtist return self.get_layer_artist(cls, layer=layer, layer_state=layer_state)