Ejemplo n.º 1
0
    def _stats_plot(self, element, y, data=None):
        """
        Helper method to generate element from indexed dataframe.
        """
        data, x, y = self._process_args(data, None, y)

        opts = {
            'plot': dict(self._plot_opts),  # labelled=[]),
            'norm': self._norm_opts,
            'style': self._style_opts
        }
        if not isinstance(y, (list, tuple)):
            ranges = {y: self._dim_ranges['y']}
            return (element(
                data, self.by,
                y).redim.range(**ranges).relabel(**self._relabel).opts(**opts))

        labelled = ['y' if self.invert else 'x'
                    ] if self.group_label != 'Group' else []
        if self.value_label != 'value':
            labelled.append('x' if self.invert else 'y')
        opts['plot']['labelled'] = labelled

        kdims = [self.group_label]
        ranges = {self.value_label: self._dim_ranges['y']}
        data = data[list(y)]
        if check_library(data, 'dask'):
            from dask.dataframe import melt
        else:
            melt = pd.melt
        df = melt(data, var_name=self.group_label, value_name=self.value_label)
        return (element(
            df, kdims, self.value_label).redim.range(**ranges).redim(
                **self._redim).relabel(**self._relabel).opts(**opts))
Ejemplo n.º 2
0
    def _category_plot(self, element, x, y, data):
        """
        Helper method to generate element from indexed dataframe.
        """
        labelled = ['y' if self.invert else 'x'] if x != 'index' else []
        if self.value_label != 'value':
            labelled.append('x' if self.invert else 'y')

        opts = {
            'plot': dict(self._plot_opts, labelled=labelled),
            'style': dict(self._style_opts),
            'norm': self._norm_opts
        }
        ranges = {self.value_label: self._dim_ranges['y']}

        id_vars = [x]
        if any((v in [data.index.names] + ['index']) or v == data.index.name
               for v in id_vars):
            data = data.reset_index()
        data = data[y + [x]]

        if check_library(data, 'dask'):
            from dask.dataframe import melt
        else:
            melt = pd.melt

        df = melt(data,
                  id_vars=[x],
                  var_name=self.group_label,
                  value_name=self.value_label)
        kdims = [x, self.group_label]
        return (element(
            df, kdims, self.value_label).redim.range(**ranges).redim(
                **self._redim).relabel(**self._relabel).opts(**opts))
Ejemplo n.º 3
0
    def chart(self, element, x, y, data=None):
        "Helper method for simple x vs. y charts"
        data, x, y = self._process_args(data, x, y)
        if x and y and not isinstance(y, (list, tuple)):
            return self.single_chart(element, x, y, data)
        elif x and y and len(y) == 1:
            return self.single_chart(element, x, y[0], data)

        labelled = ['y' if self.invert else 'x'] if x != 'index' else []
        if self.value_label != 'value':
            labelled.append('x' if self.invert else 'y')
        opts = dict(plot=dict(self._plot_opts, labelled=labelled),
                    norm=self._norm_opts,
                    style=self._style_opts)
        charts = []
        for c in y:
            chart = element(data, x, c).redim(**{c: self.value_label})
            ranges = {
                x: self._dim_ranges['x'],
                self.value_label: self._dim_ranges['y']
            }
            charts.append((c, chart.relabel(**self._relabel).redim.range(
                **ranges).opts(**opts)))
        return self._by_type(charts, self.group_label,
                             sort=False).options('NdOverlay', batched=False)
Ejemplo n.º 4
0
    def single_chart(self, element, x, y, data=None):
        labelled = ['y' if self.invert else 'x'] if x != 'index' else []
        if not self.is_series:
            labelled.append('x' if self.invert else 'y')
        elif not self.label:
            self._relabel['label'] = y

        opts = {
            element.__name__:
            dict(plot=dict(self._plot_opts, labelled=labelled),
                 norm=self._norm_opts,
                 style=self._style_opts)
        }
        ranges = {y: self._dim_ranges['y']}
        if x:
            ranges[x] = self._dim_ranges['x']

        data = self.data if data is None else data
        ys = [y]
        for p in 'cs':
            if p in self.kwds and self.kwds[p] in data.columns:
                ys += [self.kwds[p]]

        if self.by:
            chart = Dataset(data, self.by + [x],
                            ys).to(element, x, ys,
                                   self.by).relabel(**self._relabel)
            chart = chart.layout() if self.subplots else chart.overlay(
            ).options(batched=False)
        else:
            chart = element(data, x, ys).relabel(**self._relabel)
        return chart.redim.range(**ranges).redim(**self._redim).opts(opts)
Ejemplo n.º 5
0
    def points(self, x=None, y=None, data=None):
        data = self.data if data is None else data
        params = dict(self._relabel)

        plot_opts = dict(self._plot_opts)
        if 'c' in self.kwds:
            plot_opts['color_index'] = self.kwds['c']
        if 's' in self.kwds:
            plot_opts['size_index'] = self.kwds['s']
        if 'marker' in self.kwds:
            plot_opts['marker'] = self.kwds['marker']
        opts = dict(plot=plot_opts,
                    style=self._style_opts,
                    norm=self._norm_opts)

        element = Points
        if self.crs is not None:
            from geoviews import Points as element
            params['crs'] = self.crs

        vdims = [self.kwds['c']] if 'c' in self.kwds else []
        if 's' in self.kwds:
            vdims.append(self.kwds['s'])
        return element(data, [x, y],
                       **params).redim(**self._redim).opts(**opts)
Ejemplo n.º 6
0
    def quadmesh(self, x=None, y=None, z=None, data=None):
        import xarray as xr
        data = self.data if data is None else data

        z = z or self.kwds.get('z')
        x = x or self.x
        y = y or self.y
        if not (x and y):
            x, y = list([k for k, v in data.coords.items() if v.size > 1])
        if not z:
            z = list(data.data_vars)[0] if isinstance(
                data, xr.Dataset) else [data.name]

        params = dict(self._relabel)
        opts = dict(plot=self._plot_opts,
                    style=self._style_opts,
                    norm=self._norm_opts)

        element = QuadMesh
        if self.crs is not None:
            from geoviews import QuadMesh as element
            params['crs'] = self.crs
        return element(data, [x, y], z,
                       **params).redim(**self._redim).opts(**opts)
Ejemplo n.º 7
0
    def image(self, x=None, y=None, z=None, data=None):
        import xarray as xr
        data = self.data if data is None else data

        z = z or self.kwds.get('z')
        x = x or self.x
        y = y or self.y
        if not (x and y):
            x, y = list(data.dims)[::-1]
        if not z:
            z = list(data.data_vars)[0] if isinstance(
                data, xr.Dataset) else [data.name]

        params = dict(self._relabel)
        opts = dict(plot=self._plot_opts,
                    style=self._style_opts,
                    norm=self._norm_opts)

        element = Image
        if self.crs is not None:
            from geoviews import Image as element
            params['crs'] = self.crs
        return element(data, [x, y], z,
                       **params).redim(**self._redim).opts(**opts)