Exemplo n.º 1
0
    def test_selection_expr_stream_hist_invert_axes(self):
        # Create SelectionExpr on element
        hist = Histogram(([1, 2, 3, 4, 5], [1, 5, 2, 3,
                                            7])).opts(invert_axes=True)
        expr_stream = SelectionExpr(hist)

        # Check stream properties
        self.assertEqual(len(expr_stream.input_streams), 1)
        self.assertIsInstance(expr_stream.input_streams[0], SelectionXY)
        self.assertIsNone(expr_stream.bbox)
        self.assertIsNone(expr_stream.selection_expr)

        # Simulate interactive update by triggering source stream.
        # Select second and forth bar.
        expr_stream.input_streams[0].event(bounds=(2.5, 1.5, 6, 4.6))
        self.assertEqual(repr(expr_stream.selection_expr),
                         repr((dim('x') >= 1.5) & (dim('x') <= 4.6)))
        self.assertEqual(expr_stream.bbox, {'x': (1.5, 4.6)})

        # Select third, forth, and fifth bar.  Make sure there is special
        # handling when last bar is selected to include values exactly on the
        # upper edge in the selection
        expr_stream.input_streams[0].event(bounds=(-10, 2.5, 10, 8))
        self.assertEqual(repr(expr_stream.selection_expr),
                         repr((dim('x') >= 2.5) & (dim('x') <= 8)))
        self.assertEqual(expr_stream.bbox, {'x': (2.5, 8)})
Exemplo n.º 2
0
    def test_selection_expr_stream_hist_invert_xaxis_yaxis(self):
        # Create SelectionExpr on element
        hist = Histogram(([1, 2, 3, 4, 5], [1, 5, 2, 3, 7])).opts(
            invert_xaxis=True,
            invert_yaxis=True,
        )
        expr_stream = SelectionExpr(hist)

        # Check stream properties
        self.assertEqual(len(expr_stream._source_streams), 1)
        self.assertIsInstance(expr_stream._source_streams[0], SelectionXY)
        self.assertIsNone(expr_stream.bbox)
        self.assertIsNone(expr_stream.selection_expr)

        # Simulate interactive update by triggering source stream.
        # Select second and forth bar.
        expr_stream._source_streams[0].event(bounds=(4.6, 6, 1.5, 2.5))
        self.assertEqual(repr(expr_stream.selection_expr),
                         repr(dim('x').digitize(hist.edges).isin([2, 4])))
        self.assertEqual(expr_stream.bbox, {'x': (1.5, 4.5)})

        # Select third, forth, and fifth bar.  Make sure there is special
        # handling when last bar is selected to include values exactly on the
        # upper edge in the selection
        expr_stream._source_streams[0].event(bounds=(8, 10, 2.5, -10))
        self.assertEqual(
            repr(expr_stream.selection_expr),
            repr((dim('x').digitize(hist.edges).isin([3, 4, 5]))
                 | (dim('x') == hist.edges[-1])))
        self.assertEqual(expr_stream.bbox, {'x': (2.5, 5.5)})
Exemplo n.º 3
0
 def test_histogram_padding_square_positive(self):
     points = Histogram([(1, 2), (2, 1), (3, 3)]).options(padding=0.1)
     plot = bokeh_renderer.get_plot(points)
     x_range, y_range = plot.handles['x_range'], plot.handles['y_range']
     self.assertEqual(x_range.start, 0.19999999999999996)
     self.assertEqual(x_range.end, 3.8)
     self.assertEqual(y_range.start, 0)
     self.assertEqual(y_range.end, 3.2)
Exemplo n.º 4
0
 def test_histogram_padding_nonsquare(self):
     histogram = Histogram([(1, 2), (2, 1), (3, 3)]).options(padding=0.1, width=600)
     plot = bokeh_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['x_range'], plot.handles['y_range']
     self.assertEqual(x_range.start, 0.35)
     self.assertEqual(x_range.end, 3.65)
     self.assertEqual(y_range.start, 0)
     self.assertEqual(y_range.end, 3.2)
Exemplo n.º 5
0
 def test_histogram_line_width_op(self):
     histogram = Histogram([(0, 0, 1), (0, 1, 4), (0, 2, 8)],
                           vdims=['y', 'line_width']).options(line_width='line_width')
     plot = bokeh_renderer.get_plot(histogram)
     cds = plot.handles['cds']
     glyph = plot.handles['glyph']
     self.assertEqual(cds.data['line_width'], np.array([1, 4, 8]))
     self.assertEqual(glyph.line_width, {'field': 'line_width'})
Exemplo n.º 6
0
 def test_histogram_alpha_op(self):
     histogram = Histogram([(0, 0, 0), (0, 1, 0.2), (0, 2, 0.7)],
                           vdims=['y', 'alpha']).options(alpha='alpha')
     plot = bokeh_renderer.get_plot(histogram)
     cds = plot.handles['cds']
     glyph = plot.handles['glyph']
     self.assertEqual(cds.data['alpha'], np.array([0, 0.2, 0.7]))
     self.assertEqual(glyph.fill_alpha, {'field': 'alpha'})
Exemplo n.º 7
0
 def test_histogram_padding_square_negative(self):
     points = Histogram([(1, -2), (2, -1), (3, -3)]).options(padding=0.1)
     plot = mpl_renderer.get_plot(points)
     x_range, y_range = plot.handles['axis'].get_xlim(), plot.handles['axis'].get_ylim()
     self.assertEqual(x_range[0], 0.19999999999999996)
     self.assertEqual(x_range[1], 3.8)
     self.assertEqual(y_range[0], -3.2)
     self.assertEqual(y_range[1], 0)
Exemplo n.º 8
0
 def test_histogram_padding_nonsquare(self):
     histogram = Histogram([(1, 2), (2, 1), (3, 3)]).options(padding=0.1, aspect=2)
     plot = mpl_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['axis'].get_xlim(), plot.handles['axis'].get_ylim()
     self.assertEqual(x_range[0], 0.35)
     self.assertEqual(x_range[1], 3.65)
     self.assertEqual(y_range[0], 0)
     self.assertEqual(y_range[1], 3.2)
Exemplo n.º 9
0
 def test_histogram_color_op(self):
     histogram = Histogram([(0, 0, '#000000'), (0, 1, '#FF0000'), (0, 2, '#00FF00')],
                           vdims=['y', 'color']).options(color='color')
     plot = mpl_renderer.get_plot(histogram)
     artist = plot.handles['artist']
     children = artist.get_children()
     for c, w in zip(children, ['#000000', '#FF0000', '#00FF00']):
         self.assertEqual(c.get_facecolor(), tuple(c/255. for c in hex2rgb(w))+(1,))
Exemplo n.º 10
0
 def test_histogram_padding_logx(self):
     histogram = Histogram([(1, 1), (2, 2), (3,3)]).options(padding=0.1, logx=True)
     plot = mpl_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['axis'].get_xlim(), plot.handles['axis'].get_ylim()
     self.assertEqual(x_range[0], 0.41158562699652224)
     self.assertEqual(x_range[1], 4.2518491541367327)
     self.assertEqual(y_range[0], 0)
     self.assertEqual(y_range[1], 3.2)
Exemplo n.º 11
0
 def test_histogram_line_width_op(self):
     histogram = Histogram([(0, 0, 1), (0, 1, 4), (0, 2, 8)],
                           vdims=['y', 'line_width']).options(linewidth='line_width')
     plot = mpl_renderer.get_plot(histogram)
     artist = plot.handles['artist']
     children = artist.get_children()
     for c, w in zip(children, np.array([1, 4, 8])):
         self.assertEqual(c.get_linewidth(), w)
Exemplo n.º 12
0
 def test_histogram_padding_logy(self):
     histogram = Histogram([(1, 2), (2, 1), (3, 3)]).options(padding=0.1, logy=True)
     plot = mpl_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['axis'].get_xlim(), plot.handles['axis'].get_ylim()
     self.assertEqual(x_range[0], 0.19999999999999996)
     self.assertEqual(x_range[1], 3.8)
     self.assertEqual(y_range[0], 1)
     self.assertEqual(y_range[1], 3.3483695221017129)
Exemplo n.º 13
0
 def test_histogram_padding_logx(self):
     histogram = Histogram([(1, 1), (2, 2), (3,3)]).options(padding=0.1, logx=True)
     plot = bokeh_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['x_range'], plot.handles['y_range']
     self.assertEqual(x_range.start, 0.41158562699652224)
     self.assertEqual(x_range.end, 4.2518491541367327)
     self.assertEqual(y_range.start, 0)
     self.assertEqual(y_range.end, 3.2)
Exemplo n.º 14
0
 def test_histogram_color_op(self):
     histogram = Histogram([(0, 0, '#000'), (0, 1, '#F00'), (0, 2, '#0F0')],
                           vdims=['y', 'color']).options(color='color')
     plot = bokeh_renderer.get_plot(histogram)
     cds = plot.handles['cds']
     glyph = plot.handles['glyph']
     self.assertEqual(cds.data['color'], np.array(['#000', '#F00', '#0F0']))
     self.assertEqual(glyph.fill_color, {'field': 'color'})
     self.assertEqual(glyph.line_color, 'black')
Exemplo n.º 15
0
 def test_histogram_padding_logy(self):
     histogram = Histogram([(1, 2), (2, 1), (3, 3)]).options(padding=0.1,
                                                             logy=True)
     plot = bokeh_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['x_range'], plot.handles['y_range']
     self.assertEqual(x_range.start, 0.19999999999999996)
     self.assertEqual(x_range.end, 3.8)
     self.assertEqual(y_range.start, 0.033483695221017122)
     self.assertEqual(y_range.end, 3.3483695221017129)
Exemplo n.º 16
0
 def test_histogram_padding_logy(self):
     histogram = Histogram([(1, 2), (2, 1), (3, 3)]).options(padding=0.1, logy=True)
     plot = mpl_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['axis'].get_xlim(), plot.handles['axis'].get_ylim()
     self.assertEqual(x_range[0], 0.19999999999999996)
     self.assertEqual(x_range[1], 3.8)
     self.assertEqual(y_range[0], 0.03348369522101712)
     self.assertEqual(y_range[1], 3.3483695221017129)
     self.log_handler.assertContains('WARNING', 'Logarithmic axis range encountered value less than')
Exemplo n.º 17
0
 def test_histogram_padding_logy(self):
     histogram = Histogram([(1, 2), (2, 1), (3, 3)]).options(padding=0.1, logy=True)
     plot = bokeh_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['x_range'], plot.handles['y_range']
     self.assertEqual(x_range.start, 0.19999999999999996)
     self.assertEqual(x_range.end, 3.8)
     self.assertEqual(y_range.start, 0.033483695221017122)
     self.assertEqual(y_range.end, 3.3483695221017129)
     self.log_handler.assertContains('WARNING', 'Logarithmic axis range encountered value less than')
Exemplo n.º 18
0
 def test_histogram_line_color_op(self):
     histogram = Histogram([(0, 0, '#000'), (0, 1, '#F00'), (0, 2, '#0F0')],
                           vdims=['y', 'color']).options(edgecolor='color')
     plot = mpl_renderer.get_plot(histogram)
     artist = plot.handles['artist']
     children = artist.get_children()
     self.assertEqual(children[0].get_edgecolor(), (0, 0, 0, 1))
     self.assertEqual(children[1].get_edgecolor(), (1, 0, 0, 1))
     self.assertEqual(children[2].get_edgecolor(), (0, 1, 0, 1))
Exemplo n.º 19
0
 def test_histogram_padding_datetime_nonsquare(self):
     histogram = Histogram([(np.datetime64('2016-04-0%d' % i, 'ns'), i) for i in range(1, 4)]).options(
         padding=0.1, aspect=2
     )
     plot = mpl_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['axis'].get_xlim(), plot.handles['axis'].get_ylim()
     self.assertEqual(x_range[0], 16891.35)
     self.assertEqual(x_range[1], 16894.65)
     self.assertEqual(y_range[0], 0)
     self.assertEqual(y_range[1], 3.2)
Exemplo n.º 20
0
 def test_histogram_plot_styling(self):
     props = {
         'color': 'orange',
         'line_width': 7,
         'line_color': 'green',
     }
     hist = Histogram((self.edges, self.frequencies)).opts(**props)
     state = self._get_plot_state(hist)
     marker = state['data'][0]['marker']
     self.assert_property_values(marker, props)
Exemplo n.º 21
0
 def test_op_ndoverlay_value(self):
     colors = ['blue', 'red']
     overlay = NdOverlay(
         {
             color: Histogram(np.arange(i + 2))
             for i, color in enumerate(colors)
         }, 'Color').options('Histogram', fill_color='Color')
     plot = bokeh_renderer.get_plot(overlay)
     for subplot, color in zip(plot.subplots.values(), colors):
         self.assertEqual(subplot.handles['glyph'].fill_color, color)
Exemplo n.º 22
0
 def test_histogram_padding_datetime_nonsquare(self):
     histogram = Histogram([(np.datetime64('2016-04-0%d' % i, 'ns'), i) for i in range(1, 4)]).options(
         padding=0.1, width=600
     )
     plot = bokeh_renderer.get_plot(histogram)
     x_range, y_range = plot.handles['x_range'], plot.handles['y_range']
     self.assertEqual(x_range.start, np.datetime64('2016-03-31T08:24:00.000000000'))
     self.assertEqual(x_range.end, np.datetime64('2016-04-03T15:36:00.000000000'))
     self.assertEqual(y_range.start, 0)
     self.assertEqual(y_range.end, 3.2)
Exemplo n.º 23
0
 def test_op_ndoverlay_value(self):
     colors = ['blue', 'red']
     overlay = NdOverlay({color: Histogram(np.arange(i+2))
                          for i, color in enumerate(colors)}, 'Color').options(
                                  'Histogram', facecolor='Color'
                          )
     plot = mpl_renderer.get_plot(overlay)
     colors = [(0, 0, 1, 1), (1, 0, 0, 1)]
     for subplot, color in zip(plot.subplots.values(),  colors):
         children = subplot.handles['artist'].get_children()
         for c in children:
             self.assertEqual(c.get_facecolor(), color)
Exemplo n.º 24
0
 def test_histogram_categorical_color_op(self):
     histogram = Histogram([(0, 0, 'A'), (0, 1, 'B'), (0, 2, 'C')],
                           vdims=['y', 'color']).options(color='color')
     plot = bokeh_renderer.get_plot(histogram)
     cds = plot.handles['cds']
     glyph = plot.handles['glyph']
     cmapper = plot.handles['color_color_mapper']
     self.assertTrue(cmapper, CategoricalColorMapper)
     self.assertEqual(cmapper.factors, ['A', 'B', 'C'])
     self.assertEqual(cds.data['color'], np.array(['A', 'B', 'C']))
     self.assertEqual(glyph.fill_color, {'field': 'color', 'transform': cmapper})
     self.assertEqual(glyph.line_color, 'black')
Exemplo n.º 25
0
 def test_histogram_plot(self):
     hist = Histogram((self.edges, self.frequencies))
     state = self._get_plot_state(hist)
     np.testing.assert_equal(state['data'][0]['x'], self.edges)
     np.testing.assert_equal(state['data'][0]['y'], self.frequencies)
     self.assertEqual(state['data'][0]['type'], 'bar')
     self.assertEqual(state['data'][0]['orientation'], 'v')
     self.assertEqual(state['data'][0]['width'], 1)
     self.assertEqual(state['layout']['xaxis']['range'], [-3.5, 2.5])
     self.assertEqual(state['layout']['xaxis']['title']['text'], 'x')
     self.assertEqual(state['layout']['yaxis']['range'], [0, 5])
     self.assertEqual(state['layout']['yaxis']['title']['text'],
                      'Frequency')
Exemplo n.º 26
0
 def test_histogram_linear_color_op(self):
     histogram = Histogram([(0, 0, 0), (0, 1, 1), (0, 2, 2)],
                           vdims=['y', 'color']).options(color='color')
     plot = bokeh_renderer.get_plot(histogram)
     cds = plot.handles['cds']
     glyph = plot.handles['glyph']
     cmapper = plot.handles['color_color_mapper']
     self.assertTrue(cmapper, LinearColorMapper)
     self.assertEqual(cmapper.low, 0)
     self.assertEqual(cmapper.high, 2)
     self.assertEqual(cds.data['color'], np.array([0, 1, 2]))
     self.assertEqual(glyph.fill_color, {'field': 'color', 'transform': cmapper})
     self.assertEqual(glyph.line_color, 'black')
Exemplo n.º 27
0
 def cb(aname):
     x = np.linspace(0, 1, 10)
     y = np.random.randn(10)
     curve = Curve((x, y), group=aname)
     hist = Histogram(y)
     return (curve + hist).opts(shared_axes=False)
Exemplo n.º 28
0
 def setUp(self):
     self.values = np.arange(10)
     self.edges =  np.arange(11)
     self.dataset1d = Histogram((self.edges, self.values))
Exemplo n.º 29
0
class Binned1DTest(ComparisonTestCase):

    def setUp(self):
        self.values = np.arange(10)
        self.edges =  np.arange(11)
        self.dataset1d = Histogram((self.edges, self.values))

    def test_slice_all(self):
        sliced = self.dataset1d[:]
        self.assertEqual(sliced.values, self.values)
        self.assertEqual(sliced.edges, self.edges)

    def test_slice_exclusive_upper(self):
        "Exclusive upper boundary semantics for bin centers"
        sliced = self.dataset1d[:6.5]
        self.assertEqual(sliced.values, np.arange(6))
        self.assertEqual(sliced.edges, np.arange(7))

    def test_slice_exclusive_upper_exceeded(self):
        "Slightly above the boundary in the previous test"
        sliced = self.dataset1d[:6.55]
        self.assertEqual(sliced.values, np.arange(7))
        self.assertEqual(sliced.edges, np.arange(8))

    def test_slice_inclusive_lower(self):
        "Inclusive lower boundary semantics for bin centers"
        sliced = self.dataset1d[3.5:]
        self.assertEqual(sliced.values, np.arange(3, 10))
        self.assertEqual(sliced.edges, np.arange(3, 11))

    def test_slice_inclusive_lower_undershot(self):
        "Inclusive lower boundary semantics for bin centers"
        sliced = self.dataset1d[3.45:]
        self.assertEqual(sliced.values, np.arange(3, 10))
        self.assertEqual(sliced.edges, np.arange(3, 11))

    def test_slice_bounded(self):
        sliced = self.dataset1d[3.5:6.5]
        self.assertEqual(sliced.values, np.arange(3, 6))
        self.assertEqual(sliced.edges, np.arange(3, 7))

    def test_slice_lower_out_of_bounds(self):
        sliced = self.dataset1d[-3:]
        self.assertEqual(sliced.values, self.values)
        self.assertEqual(sliced.edges, self.edges)

    def test_slice_upper_out_of_bounds(self):
        sliced = self.dataset1d[:12]
        self.assertEqual(sliced.values, self.values)
        self.assertEqual(sliced.edges, self.edges)

    def test_slice_both_out_of_bounds(self):
        sliced = self.dataset1d[-3:13]
        self.assertEqual(sliced.values, self.values)
        self.assertEqual(sliced.edges, self.edges)

    def test_scalar_index(self):
        self.assertEqual(self.dataset1d[4.5], 4)
        self.assertEqual(self.dataset1d[3.7], 3)
        self.assertEqual(self.dataset1d[9.9], 9)

    def test_scalar_index_boundary(self):
        """
        Scalar at boundary indexes next bin.
        (exclusive upper boundary for current bin)
        """
        self.assertEqual(self.dataset1d[4], 4)
        self.assertEqual(self.dataset1d[5], 5)

    def test_scalar_lowest_index(self):
        self.assertEqual(self.dataset1d[0], 0)

    def test_scalar_lowest_index_out_of_bounds(self):
        with self.assertRaises(IndexError):
            self.dataset1d[-1]

    def test_scalar_highest_index_out_of_bounds(self):
        with self.assertRaises(IndexError):
            self.dataset1d[10]

    def test_groupby_kdim(self):
        grouped = self.dataset1d.groupby('x', group_type=Dataset)
        holomap = HoloMap({self.edges[i:i+2].mean(): Dataset([(i,)], vdims=['Frequency'])
                           for i in range(10)}, kdims=['x'])
        self.assertEqual(grouped, holomap)
Exemplo n.º 30
0
class Binned1DTest(ComparisonTestCase):

    def setUp(self):
        self.values = np.arange(10)
        self.edges =  np.arange(11)
        self.dataset1d = Histogram((self.edges, self.values))

    def test_slice_all(self):
        sliced = self.dataset1d[:]
        self.assertEqual(sliced.values, self.values)
        self.assertEqual(sliced.edges, self.edges)

    def test_slice_exclusive_upper(self):
        "Exclusive upper boundary semantics for bin centers"
        sliced = self.dataset1d[:6.5]
        self.assertEqual(sliced.values, np.arange(6))
        self.assertEqual(sliced.edges, np.arange(7))

    def test_slice_exclusive_upper_exceeded(self):
        "Slightly above the boundary in the previous test"
        sliced = self.dataset1d[:6.55]
        self.assertEqual(sliced.values, np.arange(7))
        self.assertEqual(sliced.edges, np.arange(8))

    def test_slice_inclusive_lower(self):
        "Inclusive lower boundary semantics for bin centers"
        sliced = self.dataset1d[3.5:]
        self.assertEqual(sliced.values, np.arange(3, 10))
        self.assertEqual(sliced.edges, np.arange(3, 11))

    def test_slice_inclusive_lower_undershot(self):
        "Inclusive lower boundary semantics for bin centers"
        sliced = self.dataset1d[3.45:]
        self.assertEqual(sliced.values, np.arange(3, 10))
        self.assertEqual(sliced.edges, np.arange(3, 11))

    def test_slice_bounded(self):
        sliced = self.dataset1d[3.5:6.5]
        self.assertEqual(sliced.values, np.arange(3, 6))
        self.assertEqual(sliced.edges, np.arange(3, 7))

    def test_slice_lower_out_of_bounds(self):
        sliced = self.dataset1d[-3:]
        self.assertEqual(sliced.values, self.values)
        self.assertEqual(sliced.edges, self.edges)

    def test_slice_upper_out_of_bounds(self):
        sliced = self.dataset1d[:12]
        self.assertEqual(sliced.values, self.values)
        self.assertEqual(sliced.edges, self.edges)

    def test_slice_both_out_of_bounds(self):
        sliced = self.dataset1d[-3:13]
        self.assertEqual(sliced.values, self.values)
        self.assertEqual(sliced.edges, self.edges)

    def test_scalar_index(self):
        self.assertEqual(self.dataset1d[4.5], 4)
        self.assertEqual(self.dataset1d[3.7], 3)
        self.assertEqual(self.dataset1d[9.9], 9)

    def test_scalar_index_boundary(self):
        """
        Scalar at boundary indexes next bin.
        (exclusive upper boundary for current bin)
        """
        self.assertEqual(self.dataset1d[4], 4)
        self.assertEqual(self.dataset1d[5], 5)

    def test_scalar_lowest_index(self):
        self.assertEqual(self.dataset1d[0], 0)

    def test_scalar_lowest_index_out_of_bounds(self):
        with self.assertRaises(IndexError):
            self.dataset1d[-1]

    def test_scalar_highest_index_out_of_bounds(self):
        with self.assertRaises(IndexError):
            self.dataset1d[10]

    def test_groupby_kdim(self):
        grouped = self.dataset1d.groupby('x', group_type=Dataset)
        holomap = HoloMap({self.edges[i:i+2].mean(): Dataset([(i,)], vdims=['Frequency'])
                           for i in range(10)}, kdims=['x'])
        self.assertEqual(grouped, holomap)
Exemplo n.º 31
0
 def setUp(self):
     self.values = np.arange(10)
     self.edges =  np.arange(11)
     self.dataset1d = Histogram((self.edges, self.values))
Exemplo n.º 32
0
 def test_histogram_alpha_op(self):
     histogram = Histogram([(0, 0, 0), (0, 1, 0.2), (0, 2, 0.7)],
                           vdims=['y', 'alpha']).options(alpha='alpha')
     with self.assertRaises(Exception):
         mpl_renderer.get_plot(histogram)