Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed Jun 24, 2022
1 parent 31cac7e commit 97a2e7a
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 15 deletions.
32 changes: 17 additions & 15 deletions holoviews/plotting/bokeh/element.py
Original file line number Diff line number Diff line change
Expand Up @@ -1136,21 +1136,23 @@ def _apply_transforms(self, element, data, ranges, style, group=None):
group=group, **kwargs)
field = k
categorical = isinstance(cmapper, CategoricalColorMapper)
if categorical and getattr(self, 'show_legend', False):
legend_labels = getattr(self, 'legend_labels', False)
if legend_labels:
label_field = f'_{field}_labels'
data[label_field] = [legend_labels.get(v, v) for v in data[field]]
new_style['legend_field'] = label_field
else:
new_style['legend_field'] = field
if categorical and val.dtype.kind in 'ifMub':
if v.dimension in element:
formatter = element.get_dimension(v.dimension).pprint_value
else:
formatter = str
field = k + '_str__'
data[field] = [formatter(d) for d in val]

if categorical:
if val.dtype.kind in 'ifMub':
field = k + '_str__'
if v.dimension in element:
formatter = element.get_dimension(v.dimension).pprint_value
else:
formatter = str
data[field] = [formatter(d) for d in val]
if getattr(self, 'show_legend', False):
legend_labels = getattr(self, 'legend_labels', False)
if legend_labels:
label_field = f'_{field}_labels'
data[label_field] = [legend_labels.get(v, v) for v in val]
new_style['legend_field'] = label_field
else:
new_style['legend_field'] = field
key = {'field': field, 'transform': cmapper}
new_style[k] = key

Expand Down
7 changes: 7 additions & 0 deletions holoviews/tests/plotting/bokeh/test_overlayplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,13 @@ def test_overlay_legend(self):
legend_labels = [l.label['value'] for l in plot.state.legend[0].items]
self.assertEqual(legend_labels, ['A', 'B'])

def test_overlay_legend_with_labels(self):
overlay = (Curve(range(10), label='A') * Curve(range(10), label='B')).opts(
legend_labels={'A': 'A Curve', 'B': 'B Curve'})
plot = bokeh_renderer.get_plot(overlay)
legend_labels = [l.label['value'] for l in plot.state.legend[0].items]
self.assertEqual(legend_labels, ['A Curve', 'B Curve'])

def test_dynamic_subplot_remapping(self):
# Checks that a plot is appropriately updated when reused
def cb(X):
Expand Down
18 changes: 18 additions & 0 deletions holoviews/tests/plotting/bokeh/test_pathplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,24 @@ def test_path_continuously_varying_color_legend(self):
self.assertEqual(item.label, legend)
self.assertEqual(item.renderers, [plot.handles['glyph_renderer']])

def test_path_continuously_varying_color_legend_with_labels(self):
data = {
"x": [1,2,3,4,5,6,7,8,9],
"y": [1,2,3,4,5,6,7,8,9],
"cat": [0,1,2,0,1,2,0,1,2]
}

colors = ["#FF0000", "#00FF00", "#0000FF"]
levels=[0,1,2,3]

path = Path(data, vdims="cat").opts(color="cat", cmap=dict(zip(levels, colors)), line_width=4, show_legend=True, legend_labels={0: 'A', 1: 'B', 2: 'C'})
plot = bokeh_renderer.get_plot(path)
cds = plot.handles['cds']
item = plot.state.legend[0].items[0]
legend = {'field': '_color_str___labels'}
self.assertEqual(cds.data['_color_str___labels'], ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B'])
self.assertEqual(item.label, legend)
self.assertEqual(item.renderers, [plot.handles['glyph_renderer']])


class TestPolygonPlot(TestBokehPlot):
Expand Down
10 changes: 10 additions & 0 deletions holoviews/tests/plotting/bokeh/test_pointplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,16 @@ def test_point_categorical_color_op(self):
self.assertEqual(glyph.fill_color, {'field': 'color', 'transform': cmapper})
self.assertEqual(glyph.line_color, {'field': 'color', 'transform': cmapper})

def test_point_categorical_color_op_legend_with_labels(self):
labels = {'A': 'A point', 'B': 'B point', 'C': 'C point'}
points = Points([(0, 0, 'A'), (0, 1, 'B'), (0, 2, 'C')],
vdims='color').opts(color='color', show_legend=True, legend_labels=labels)
plot = bokeh_renderer.get_plot(points)
cds = plot.handles['cds']
legend = plot.state.legend[0].items[0]
assert legend.label == {'field': '_color_labels'}
assert cds.data['_color_labels'] == ['A point', 'B point', 'C point']

def test_point_categorical_dtype_color_op(self):
df = pd.DataFrame(dict(sample_id=['subject 1', 'subject 2', 'subject 3', 'subject 4'], category=['apple', 'pear', 'apple', 'pear'], value=[1, 2, 3, 4]))
df['category'] = df['category'].astype('category')
Expand Down
19 changes: 19 additions & 0 deletions holoviews/tests/plotting/matplotlib/test_overlayplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,22 @@ def test_overlay_ylabel_override(self):
overlay = (Curve(range(10)).options(ylabel='custom y-label') * Curve(range(10)))
axes = mpl_renderer.get_plot(overlay).handles['axis']
self.assertEqual(axes.get_ylabel(), 'custom y-label')



class TestLegends(TestMPLPlot):

def test_overlay_legend(self):
overlay = Curve(range(10), label='A') * Curve(range(10), label='B')
plot = mpl_renderer.get_plot(overlay)
legend = plot.handles['legend']
legend_labels = [l.get_text() for l in legend.texts]
self.assertEqual(legend_labels, ['A', 'B'])

def test_overlay_legend_with_labels(self):
overlay = (Curve(range(10), label='A') * Curve(range(10), label='B')).opts(
legend_labels={'A': 'A Curve', 'B': 'B Curve'})
plot = mpl_renderer.get_plot(overlay)
legend = plot.handles['legend']
legend_labels = [l.get_text() for l in legend.texts]
self.assertEqual(legend_labels, ['A Curve', 'B Curve'])
18 changes: 18 additions & 0 deletions holoviews/tests/plotting/matplotlib/test_pointplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,24 @@ def test_point_categorical_color_op(self):
self.assertEqual(np.asarray(artist.get_array()), np.array([0, 1, 0]))
self.assertEqual(artist.get_clim(), (0, 1))

def test_point_categorical_color_op_legend(self):
points = Points([(0, 0, 'A'), (0, 1, 'B'), (0, 2, 'A')],
vdims='color').options(color='color', show_legend=True)
plot = mpl_renderer.get_plot(points)
artist = plot.handles['artist']
leg = plot.handles['axis'].get_legend()
legend_labels = [l.get_text() for l in leg.texts]
self.assertEqual(legend_labels, ['A', 'B'])

def test_point_categorical_color_op_legend_with_labels(self):
points = Points([(0, 0, 'A'), (0, 1, 'B'), (0, 2, 'A')], vdims='color').opts(
color='color', show_legend=True, legend_labels={'A': 'A point', 'B': 'B point'})
plot = mpl_renderer.get_plot(points)
artist = plot.handles['artist']
leg = plot.handles['axis'].get_legend()
legend_labels = [l.get_text() for l in leg.texts]
self.assertEqual(legend_labels, ['A point', 'B point'])

def test_point_size_op(self):
points = Points([(0, 0, 1), (0, 1, 4), (0, 2, 8)],
vdims='size').options(s='size')
Expand Down

0 comments on commit 97a2e7a

Please sign in to comment.