Source code for glue.viewers.histogram.viewer

from glue.core.util import update_ticks
from glue.core.roi import RangeROI
from glue.core.subset import roi_to_subset_state
from glue.utils import mpl_to_datetime64

from glue.viewers.histogram.compat import update_histogram_viewer_state

__all__ = ['MatplotlibHistogramMixin']


[docs]class MatplotlibHistogramMixin(object):
[docs] def setup_callbacks(self): self.state.add_callback('x_att', self._update_axes) self.state.add_callback('x_log', self._update_axes) self.state.add_callback('normalize', self._update_axes) self._update_axes()
def _update_axes(self, *args): if self.state.x_att is not None: # Update ticks, which sets the labels to categories if components are categorical update_ticks(self.axes, 'x', self.state.x_kinds, self.state.x_log, self.state.x_categories) if self.state.x_log: self.state.x_axislabel = 'Log ' + self.state.x_att.label else: self.state.x_axislabel = self.state.x_att.label if self.state.normalize: self.state.y_axislabel = 'Normalized number' else: self.state.y_axislabel = 'Number' self.axes.figure.canvas.draw_idle()
[docs] def apply_roi(self, roi, override_mode=None): # Force redraw to get rid of ROI. We do this because applying the # subset state below might end up not having an effect on the viewer, # for example there may not be any layers, or the active subset may not # be one of the layers. So we just explicitly redraw here to make sure # a redraw will happen after this method is called. self.redraw() if len(self.layers) == 0: return x_date = 'datetime' in self.state.x_kinds if x_date: roi = roi.transformed(xfunc=mpl_to_datetime64 if x_date else None) bins = self.state.bins x = roi.to_polygon()[0] lo, hi = min(x), max(x) if lo >= bins.min(): lo = bins[bins <= lo].max() if hi <= bins.max(): hi = bins[bins >= hi].min() roi_new = RangeROI(min=lo, max=hi, orientation='x') subset_state = roi_to_subset_state(roi_new, x_att=self.state.x_att, x_categories=self.state.x_categories) self.apply_subset_state(subset_state, override_mode=override_mode)
[docs] @staticmethod def update_viewer_state(rec, context): return update_histogram_viewer_state(rec, context)