def kde(self, x, y, data=None): data = self.data if data is None else data plot_opts = dict(self._plot_opts) invert = self.kwds.get('orientation', False) == 'horizontal' opts = dict(plot=dict(plot_opts, invert_axes=invert), style=self._style_opts, norm=self._norm_opts) opts = { 'Distribution': opts, 'Area': opts, 'NdOverlay': { 'plot': dict(plot_opts, legend_limit=0) } } if y and self.by: ds = Dataset(data) return ds.to(Distribution, y, [], self.by).overlay().opts(opts) elif y: return Distribution(data, y, []).opts(opts) if self.columns: data = data[self.columns] df = pd.melt(data, var_name=self.group_label, value_name=self.value_label) ds = Dataset(df) if len(df): overlay = ds.to(Distribution, self.value_label).overlay() else: vdim = self.value_label + ' Density' overlay = NdOverlay({0: Area([], self.value_label, vdim)}, [self.group_label]) return overlay.relabel(**self._relabel).opts(opts)
def test_dataset_extract_kdims(self): df = pd.DataFrame({ 'x': [1, 2, 3], 'y': [1, 2, 3], 'z': [1, 2, 3] }, columns=['x', 'y', 'z']) ds = Distribution(df) self.assertEqual(ds.kdims, [Dimension('x')])
def test_distribution_composite_empty_not_filled(self): dist = Distribution([]).opts(plot=dict(filled=False)) curve = Compositor.collapse_element(dist, backend='matplotlib') self.assertIsInstance(curve, Curve) self.assertEqual(curve.vdims, [Dimension(('Value_density', 'Value Density'))])
def test_distribution_composite_custom_vdim(self): dist = Distribution(np.array([0, 1, 2]), vdims=['Test']) area = Compositor.collapse_element(dist, backend='matplotlib') self.assertIsInstance(area, Area) self.assertEqual(area.vdims, [Dimension('Test')])
def test_distribution_array_constructor(self): dist = Distribution(np.array([0, 1, 2])) self.assertEqual(dist.kdims, [Dimension('Value')]) self.assertEqual(dist.vdims, [Dimension('Density')])
def test_distribution_array_vdim_type(self): dist = Distribution(np.array([0, 1, 2])) self.assertEqual(dist.get_dimension_type(1), np.float64)
def test_distribution_not_filled(self): dist = Distribution([1, 1.1, 2.1, 3, 2, 1, 2.2]).options(filled=False) state = self._get_plot_state(dist) self.assertEqual(state['data'][0]['type'], 'scatter') self.assertEqual(state['data'][0]['mode'], 'lines') self.assertEqual(state['data'][0].get('fill'), None)
def test_distribution_dict_constructor(self): dist = Distribution({'Value': [0, 1, 2]}) self.assertEqual(dist.kdims, [Dimension('Value')]) self.assertEqual(dist.vdims, [Dimension('Density')])
def test_distribution_array_range_kdims(self): dist = Distribution(np.array([0, 1, 2])) self.assertEqual(dist.range(0), (0, 2))
def test_distribution_array_kdim_type(self): dist = Distribution(np.array([0, 1, 2])) self.assertTrue(np.issubdtype(dist.get_dimension_type(0), np.int_))
def test_distribution_array_range_vdims(self): dist = Distribution(np.array([0, 1, 2])) dmin, dmax = dist.range(1) self.assertFalse(np.isfinite(dmin)) self.assertFalse(np.isfinite(dmax))
def test_distribution_from_image(self): dist = Distribution(Image(np.arange(5)*np.arange(5)[:, np.newaxis]), 'z') self.assertEqual(dist.range(0), (0, 16))
def test_distribution_filled(self): dist = Distribution([1, 1.1, 2.1, 3, 2, 1, 2.2]) state = self._get_plot_state(dist) self.assertEqual(state['data'][0]['type'], 'scatter') self.assertEqual(state['data'][0]['mode'], 'lines') self.assertEqual(state['data'][0]['fill'], 'tozeroy')
def test_visible(self): element = Distribution([1, 1.1, 2.1, 3, 2, 1, 2.2]).options(visible=False) state = self._get_plot_state(element) self.assertEqual(state['data'][0]['visible'], False)
def test_distribution_dframe_constructor(self): if pd is None: raise SkipTest("Test requires pandas, skipping.") dist = Distribution(pd.DataFrame({'Value': [0, 1, 2]})) self.assertEqual(dist.kdims, [Dimension('Value')]) self.assertEqual(dist.vdims, [Dimension('Density')])
def test_distribution_composite_not_filled(self): dist = Distribution(np.array([0, 1, 2])).opts(plot=dict(filled=False)) curve = Compositor.collapse_element(dist) self.assertIsInstance(curve, Curve) self.assertEqual(curve.vdims, [Dimension(('Value_density', 'Value Density'))])
def test_distribution_series_constructor(self): if pd is None: raise SkipTest("Test requires pandas") dist = Distribution(pd.Series([0, 1, 2], name='Value')) self.assertEqual(dist.kdims, [Dimension('Value')]) self.assertEqual(dist.vdims, [Dimension('Density')])
def test_distribution_array_constructor_custom_vdim(self): dist = Distribution(np.array([0, 1, 2]), vdims=['Test']) self.assertEqual(dist.kdims, [Dimension('Value')]) self.assertEqual(dist.vdims, [Dimension('Test')])
def test_distribution_series_constructor(self): dist = Distribution(pd.Series([0, 1, 2], name='Value')) self.assertEqual(dist.kdims, [Dimension('Value')]) self.assertEqual(dist.vdims, [Dimension('Density')])
def test_distribution_composite_transfer_opts_with_group(self): dist = Distribution(np.array([0, 1, 2]), group='Test').opts(style=dict(color='red')) area = Compositor.collapse_element(dist, backend='matplotlib') opts = Store.lookup_options('matplotlib', area, 'style').kwargs self.assertEqual(opts.get('color', None), 'red')
def test_distribution_composite(self): dist = Distribution(np.array([0, 1, 2])) area = Compositor.collapse_element(dist, backend='matplotlib') self.assertIsInstance(area, Area) self.assertEqual(area.vdims, [Dimension(('Value_density', 'Value Density'))])