Skip to content

Commit 800cdb3

Browse files
committed
Initial work on adding unit support for scatter viewer
1 parent ab63d9d commit 800cdb3

File tree

4 files changed

+35
-3
lines changed

4 files changed

+35
-3
lines changed

glue_jupyter/bqplot/scatter/layer_artist.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from glue.viewers.scatter.layer_artist import DensityMapLimits
1010
from glue.viewers.scatter.state import ScatterLayerState
1111
from glue_jupyter.bqplot.scatter.scatter_density_mark import GenericDensityMark
12+
from glue.core.units import UnitConverter
1213

1314
from ...utils import colormap_to_hexlist, float_or_none
1415
from ..compatibility import ScatterGL, LinesGL
@@ -175,7 +176,6 @@ def _update_data(self):
175176
x = ensure_numerical(self.layer[self._viewer_state.x_att].ravel())
176177
if x.dtype.kind == "M":
177178
x = datetime64_to_mpl(x)
178-
179179
except (IncompatibleAttribute, IndexError):
180180
# The following includes a call to self.clear()
181181
self.disable_invalid_attributes(self._viewer_state.x_att)
@@ -195,6 +195,18 @@ def _update_data(self):
195195
else:
196196
self.enable()
197197

198+
converter = UnitConverter()
199+
200+
x = converter.to_unit(self._viewer_state.x_att.parent,
201+
self._viewer_state.x_att,
202+
x,
203+
self._viewer_state.x_display_unit)
204+
205+
y = converter.to_unit(self._viewer_state.y_att.parent,
206+
self._viewer_state.y_att,
207+
y,
208+
self._viewer_state.y_display_unit)
209+
198210
if self.state.markers_visible:
199211

200212
if self.state.density_map:

glue_jupyter/bqplot/scatter/viewer.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ def __init__(self, *args, **kwargs):
3636
def _update_axes(self, *args):
3737

3838
if self.state.x_att is not None:
39-
self.state.x_axislabel = str(self.state.x_att)
39+
if self.state.x_display_unit:
40+
self.state.x_axislabel = str(self.state.x_att) + f' [{self.state.x_display_unit}]'
41+
else:
42+
self.state.x_axislabel = str(self.state.x_att)
4043

4144
if self.state.y_att is not None:
42-
self.state.y_axislabel = str(self.state.y_att)
45+
if self.state.y_display_unit:
46+
self.state.y_axislabel = str(self.state.y_att) + f' [{self.state.y_display_unit}]'
47+
else:
48+
self.state.y_axislabel = str(self.state.y_att)

glue_jupyter/common/state_widgets/viewer_scatter.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ class ScatterViewerStateWidget(v.VuetifyTemplate):
1919
y_att_items = traitlets.List().tag(sync=True)
2020
y_att_selected = traitlets.Int(allow_none=True).tag(sync=True)
2121

22+
x_display_unit_items = traitlets.List().tag(sync=True)
23+
x_display_unit_selected = traitlets.Int(allow_none=True).tag(sync=True)
24+
25+
y_display_unit_items = traitlets.List().tag(sync=True)
26+
y_display_unit_selected = traitlets.Int(allow_none=True).tag(sync=True)
27+
2228
def __init__(self, viewer_state):
2329

2430
super().__init__()
@@ -28,3 +34,5 @@ def __init__(self, viewer_state):
2834

2935
link_glue_choices(self, viewer_state, "x_att")
3036
link_glue_choices(self, viewer_state, "y_att")
37+
link_glue_choices(self, viewer_state, 'x_display_unit')
38+
link_glue_choices(self, viewer_state, 'y_display_unit')

glue_jupyter/common/state_widgets/viewer_scatter.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
<div>
77
<v-select label="y axis" :items="y_att_items" v-model="y_att_selected" hide-details />
88
</div>
9+
<div>
10+
<v-select :items="x_display_unit_items" label="x axis units" v-model="x_display_unit_selected" hide-details/>
11+
</div>
12+
<div>
13+
<v-select :items="y_display_unit_items" label="y axis units" v-model="y_display_unit_selected" hide-details/>
14+
</div>
915
<div>
1016
<v-subheader class="pl-0 slider-label">show axes</v-subheader>
1117
<v-switch v-model="glue_state.show_axes" hide-details style="margin-top: 0"/>

0 commit comments

Comments
 (0)