def test_label_size_op_update(self): labels = HoloMap({ 0: Labels([(0, 0, 8), (0, 1, 6), (0, 2, 12)], vdims='size'), 1: Labels([(0, 0, 9), (0, 1, 4), (0, 2, 3)], vdims='size')}).options(size='size') plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] self.assertEqual([a.get_fontsize() for a in artist], [8, 6, 12]) plot.update((1,)) artist = plot.handles['artist'] self.assertEqual([a.get_fontsize() for a in artist], [9, 4, 3])
def test_label_rotation_op_update(self): labels = HoloMap({ 0: Labels([(0, 0, 45), (0, 1, 180), (0, 2, 90)], vdims='rotation'), 1: Labels([(0, 0, 30), (0, 1, 120), (0, 2, 60)], vdims='rotation') }).options(rotation='rotation') plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] self.assertEqual([a.get_rotation() for a in artist], [45, 180, 90]) plot.update((1, )) artist = plot.handles['artist'] self.assertEqual([a.get_rotation() for a in artist], [30, 120, 60])
def test_label_alpha_op_update(self): labels = HoloMap({ 0: Labels([(0, 0, 0.3), (0, 1, 1), (0, 2, 0.6)], vdims='alpha'), 1: Labels([(0, 0, 0.6), (0, 1, 0.1), (0, 2, 1)], vdims='alpha') }).options(alpha='alpha') plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] self.assertEqual([a.get_alpha() for a in artist], [0.3, 1, 0.6]) plot.update((1, )) artist = plot.handles['artist'] self.assertEqual([a.get_alpha() for a in artist], [0.6, 0.1, 1])
def test_label_color_op_update(self): labels = HoloMap({ 0: Labels([(0, 0, '#000000'), (0, 1, '#FF0000'), (0, 2, '#00FF00')], vdims='color'), 1: Labels([(0, 0, '#FF0000'), (0, 1, '#00FF00'), (0, 2, '#0000FF')], vdims='color')}).options(color='color') plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] self.assertEqual([a.get_color() for a in artist], ['#000000', '#FF0000', '#00FF00']) plot.update((1,)) artist = plot.handles['artist'] self.assertEqual([a.get_color() for a in artist], ['#FF0000', '#00FF00', '#0000FF'])
def test_labels_plot(self): text = Labels([(0, 0, 'Test')]) plot = bokeh_renderer.get_plot(text) source = plot.handles['source'] data = {'x': np.array([0]), 'y': np.array([0]), 'Label': ['Test']} for c, col in source.data.items(): self.assertEqual(col, data[c])
def test_label_alpha_op(self): labels = Labels([(0, 0, 0), (0, 1, 0.2), (0, 2, 0.7)], vdims='alpha').options(alpha='alpha') plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] self.assertEqual([a.get_alpha() for a in artist], [0, 0.2, 0.7])
def test_overlay_gridstyle_applies(self): grid_style = {'grid_line_color': 'blue', 'grid_line_width': 2} overlay = (Scatter([(10,10)]).options(gridstyle=grid_style, show_grid=True, size=20) * Labels([(10, 10, 'A')])) plot = bokeh_renderer.get_plot(overlay) self.assertEqual(plot.state.xgrid[0].grid_line_color, 'blue') self.assertEqual(plot.state.xgrid[0].grid_line_width, 2)
def test_label_linear_color_op(self): labels = Labels([(0, 0, 0), (0, 1, 1), (0, 2, 2)], vdims='color').options(color='color') plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] self.assertEqual([rgb2hex(a.get_color()) for a in artist], ['#440154', '#20908c', '#fde724'])
def test_label_categorical_color_op(self): labels = Labels([(0, 0, 'A'), (0, 1, 'B'), (0, 2, 'A')], vdims='color').options(color='color', cmap='tab10') plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] self.assertEqual([rgb2hex(a.get_color()) for a in artist], ['#1f77b4', '#ff7f0e', '#1f77b4'])
def test_label_color_op(self): labels = Labels([(0, 0, '#000000'), (0, 1, '#FF0000'), (0, 2, '#00FF00')], vdims='color').options(color='color') plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] self.assertEqual([a.get_color() for a in artist], ['#000000', '#FF0000', '#00FF00'])
def test_labels_inverted(self): labels = Tiles("") * Labels([(0, 3, 0), (1, 2, 1), (2, 1, 1)]).options(invert_axes=True) with self.assertRaises(ValueError) as e: self._get_plot_state(labels) self.assertIn("invert_axes", str(e.exception))
def test_label_rotation_op(self): labels = Labels([(0, 0, 90), (0, 1, 180), (0, 2, 270)], vdims='rotation').options(rotation='rotation') plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] self.assertEqual([a.get_rotation() for a in artist], [90, 180, 270])
def test_label_font_size_op_ints(self): labels = Labels([(0, 0, 10), (0, 1, 4), (0, 2, 8)], vdims='size').options(text_font_size='size') plot = bokeh_renderer.get_plot(labels) cds = plot.handles['cds'] glyph = plot.handles['glyph'] self.assertEqual(cds.data['text_font_size'], ['10pt', '4pt', '8pt']) self.assertEqual(glyph.text_font_size, {'field': 'text_font_size'})
def test_label_alpha_op(self): labels = Labels([(0, 0, 0), (0, 1, 0.2), (0, 2, 0.7)], vdims='alpha').options(text_alpha='alpha') plot = bokeh_renderer.get_plot(labels) cds = plot.handles['cds'] glyph = plot.handles['glyph'] self.assertEqual(cds.data['text_alpha'], np.array([0, 0.2, 0.7])) self.assertEqual(glyph.text_alpha, {'field': 'text_alpha'})
def test_label_angle_op(self): labels = Labels([(0, 0, 0), (0, 1, 45), (0, 2, 90)], vdims='angle').options(angle='angle') plot = bokeh_renderer.get_plot(labels) cds = plot.handles['cds'] glyph = plot.handles['glyph'] self.assertEqual(cds.data['angle'], np.array([0, 0.785398, 1.570796])) self.assertEqual(glyph.angle, {'field': 'angle'})
def test_label_color_op(self): labels = Labels([(0, 0, '#000'), (0, 1, '#F00'), (0, 2, '#0F0')], vdims='color').options(text_color='color') plot = bokeh_renderer.get_plot(labels) cds = plot.handles['cds'] glyph = plot.handles['glyph'] self.assertEqual(cds.data['text_color'], np.array(['#000', '#F00', '#0F0'])) self.assertEqual(glyph.text_color, {'field': 'text_color'})
def test_labels_inverted(self): labels = Labels([(0, 1, 'A'), (1, 0, 'B')]).options(invert_axes=True) plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] expected = {'x': np.array([0, 1]), 'y': np.array([1, 0]), 'Label': ['A', 'B']} for i, text in enumerate(artist): self.assertEqual(text._x, expected['y'][i]) self.assertEqual(text._y, expected['x'][i]) self.assertEqual(text.get_text(), expected['Label'][i])
def test_labels_color_index_color_clash(self): labels = Labels([(0, 0, 0), (0, 1, 1), (0, 2, 2)], vdims='color').options(text_color='color', color_index='color') with ParamLogStream() as log: bokeh_renderer.get_plot(labels) log_msg = log.stream.read() warning = ("Cannot declare style mapping for 'text_color' option " "and declare a color_index; ignoring the color_index.\n") self.assertEqual(log_msg, warning)
def test_label_categorical_color_op(self): labels = Labels([(0, 0, 'A'), (0, 1, 'B'), (0, 2, 'C')], vdims='color').options(text_color='color') plot = bokeh_renderer.get_plot(labels) cds = plot.handles['cds'] glyph = plot.handles['glyph'] cmapper = plot.handles['text_color_color_mapper'] self.assertTrue(cmapper, CategoricalColorMapper) self.assertEqual(cmapper.factors, ['A', 'B', 'C']) self.assertEqual(cds.data['text_color'], np.array(['A', 'B', 'C'])) self.assertEqual(glyph.text_color, {'field': 'text_color', 'transform': cmapper})
def test_labels_formatter(self): vdim = Dimension('text', value_format=lambda x: '%.1f' % x) labels = Labels([(0, 1, 0.33333), (1, 0, 0.66666)], vdims=vdim) plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] expected = {'x': np.array([0, 1]), 'y': np.array([1, 0]), 'text': ['0.3', '0.7']} for i, text in enumerate(artist): self.assertEqual(text._x, expected['x'][i]) self.assertEqual(text._y, expected['y'][i]) self.assertEqual(text.get_text(), expected['text'][i])
def test_labels_state(self): labels = Labels([(0, 3, 0), (1, 2, 1), (2, 1, 1)]) state = self._get_plot_state(labels) self.assertEqual(state['data'][0]['x'], np.array([0, 1, 2])) self.assertEqual(state['data'][0]['y'], np.array([3, 2, 1])) self.assertEqual(state['data'][0]['text'], ['0', '1', '1']) self.assertEqual(state['data'][0]['mode'], 'text') self.assertEqual(state['layout']['xaxis']['range'], [0, 2]) self.assertEqual(state['layout']['yaxis']['range'], [1, 3]) self.assertEqual(state['layout']['xaxis']['title'], 'x') self.assertEqual(state['layout']['yaxis']['title'], 'y')
def test_labels_empty(self): labels = Labels([]) plot = bokeh_renderer.get_plot(labels) source = plot.handles['source'] glyph = plot.handles['glyph'] expected = {'x': np.array([]), 'y': np.array([]), 'Label': []} for k, vals in expected.items(): self.assertEqual(source.data[k], vals) self.assertEqual(glyph.x, 'x') self.assertEqual(glyph.y, 'y') self.assertEqual(glyph.text, 'Label')
def test_labels_inverted(self): labels = Labels([(0, 1, 'A'), (1, 0, 'B')]).options(invert_axes=True) plot = bokeh_renderer.get_plot(labels) source = plot.handles['source'] glyph = plot.handles['glyph'] expected = {'x': np.array([0, 1]), 'y': np.array([1, 0]), 'Label': ['A', 'B']} for k, vals in expected.items(): self.assertEqual(source.data[k], vals) self.assertEqual(glyph.x, 'y') self.assertEqual(glyph.y, 'x') self.assertEqual(glyph.text, 'Label')
def test_label_linear_color_op(self): labels = Labels([(0, 0, 0), (0, 1, 1), (0, 2, 2)], vdims='color').options(text_color='color') plot = bokeh_renderer.get_plot(labels) cds = plot.handles['cds'] glyph = plot.handles['glyph'] cmapper = plot.handles['text_color_color_mapper'] self.assertTrue(cmapper, LinearColorMapper) self.assertEqual(cmapper.low, 0) self.assertEqual(cmapper.high, 2) self.assertEqual(cds.data['text_color'], np.array([0, 1, 2])) self.assertEqual(glyph.text_color, {'field': 'text_color', 'transform': cmapper})
def test_labels_yoffset(self): offset = 20000 labels = Tiles("") * Labels([(self.xs[0], self.ys[0], 'A'), (self.xs[1], self.ys[1], 'B'), (self.xs[2], self.ys[2], 'C') ]).options(yoffset=offset) state = self._get_plot_state(labels) lons, lats = Tiles.easting_northing_to_lon_lat( self.xs, np.array(self.ys) + offset) self.assertEqual(state['data'][1]['lon'], lons) self.assertEqual(state['data'][1]['lat'], lats)
def test_labels_formatter(self): vdim = Dimension('text', value_format=lambda x: '%.1f' % x) labels = Labels([(0, 1, 0.33333), (1, 0, 0.66666)], vdims=vdim) plot = bokeh_renderer.get_plot(labels) source = plot.handles['source'] glyph = plot.handles['glyph'] expected = {'x': np.array([0, 1]), 'y': np.array([1, 0]), 'text': ['0.3', '0.7']} for k, vals in expected.items(): self.assertEqual(source.data[k], vals) self.assertEqual(glyph.x, 'x') self.assertEqual(glyph.y, 'y') self.assertEqual(glyph.text, 'text')
def test_labels_color_mapped(self): labels = Labels([(0, 1, 0.33333), (1, 0, 0.66666)]).options(color_index=2) plot = mpl_renderer.get_plot(labels) artist = plot.handles['artist'] expected = {'x': np.array([0, 1]), 'y': np.array([1, 0]), 'Label': ['0.33333', '0.66666']} colors = [(0.26666666666666666, 0.0039215686274509803, 0.32941176470588235, 1.0), (0.99215686274509807, 0.90588235294117647, 0.14117647058823529, 1.0)] for i, text in enumerate(artist): self.assertEqual(text._x, expected['x'][i]) self.assertEqual(text._y, expected['y'][i]) self.assertEqual(text.get_text(), expected['Label'][i]) self.assertEqual(text.get_color(), colors[i])
def test_labels_state(self): labels = Tiles("") * Labels([ (self.xs[0], self.ys[0], 'A'), (self.xs[1], self.ys[1], 'B'), (self.xs[2], self.ys[2], 'C') ]).redim.range(x=self.x_range, y=self.y_range) state = self._get_plot_state(labels) self.assertEqual(state['data'][1]['lon'], self.lons) self.assertEqual(state['data'][1]['lat'], self.lats) self.assertEqual(state['data'][1]['text'], ['A', 'B', 'C']) self.assertEqual(state['data'][1]['mode'], 'text') self.assertEqual(state['layout']['mapbox']['center'], { 'lat': self.lat_center, 'lon': self.lon_center })
def test_labels_color_mapped(self): labels = Labels([(0, 1, 0.33333, 2), (1, 0, 0.66666, 1)], vdims=['text', 'color']).options(color_index=3) plot = bokeh_renderer.get_plot(labels) source = plot.handles['source'] glyph = plot.handles['glyph'] cmapper = plot.handles['color_mapper'] expected = {'x': np.array([0, 1]), 'y': np.array([1, 0]), 'text': ['0.33333', '0.66666'], 'color': np.array([2, 1])} for k, vals in expected.items(): self.assertEqual(source.data[k], vals) self.assertEqual(glyph.x, 'x') self.assertEqual(glyph.y, 'y') self.assertEqual(glyph.text, 'text') self.assertEqual(glyph.text_color, {'field': 'color', 'transform': cmapper}) self.assertEqual(cmapper.low, 1) self.assertEqual(cmapper.high, 2)
def test_labels_color_mapped(self): labels = Labels([(0, 1, 0.33333), (1, 0, 0.66666)]).options(color_index=2) plot = bokeh_renderer.get_plot(labels) source = plot.handles['source'] glyph = plot.handles['glyph'] cmapper = plot.handles['color_mapper'] expected = { 'x': np.array([0, 1]), 'y': np.array([1, 0]), 'Label': ['0.33333', '0.66666'], 'text_color': np.array([0.33333, 0.66666]) } for k, vals in expected.items(): self.assertEqual(source.data[k], vals) self.assertEqual(glyph.x, 'x') self.assertEqual(glyph.y, 'y') self.assertEqual(glyph.text, 'Label') self.assertEqual(cmapper.low, 0.33333) self.assertEqual(cmapper.high, 0.66666)