"""
The HoloViews Seaborn interface wraps around a wide range
of Seaborn plot types including time series, kernel density
estimates, distributions and regression plots.
"""
from __future__ import absolute_import
import numpy as np
import param
from ..core import Dimension, NdMapping, Element2D
from ..element import Chart, Scatter
from .pandas import DFrame as PandasDFrame
[docs]class TimeSeries(Element2D):
"""
TimeSeries is a container for any set of curves, which the
Seaborn interface combines into a confidence interval, error
bar or overlaid plot.
The curves should be supplied as an NxM dimensional array,
x-values may also be supplied and must be of length N or M.
Alternatively a UniformNdMapping or NdOverlay of Curve objects may be
supplied.
"""
kdims = param.List(default=[Dimension('x'), Dimension('n')],
bounds=(2, 2))
group = param.String(default='TimeSeries', constant=True)
vdims = param.List(default=[Dimension('z')],
bounds=(1, 1))
def __init__(self, data, xdata=None, **params):
if isinstance(data, NdMapping):
self.xdata = data.values()[0].data[:, 0]
params = dict(data.values()[0].get_param_values(onlychanged=True), **params)
data = np.array([dv.data[:, 1] for dv in data])
else:
self.xdata = np.array(range(len(data[0, :]))) if xdata is None\
else xdata
super(TimeSeries, self).__init__(data, **params)
def dimension_values(self, dimension):
dim_idx = self.get_dimension_index(dimension)
if dim_idx == 0:
return self.xdata
elif dim_idx == 1:
return self.data.flatten()
elif dim_idx == 2:
return range(self.data.shape[1])
else:
return super(TimeSeries, self).dimension_values(dimension)
def sample(self, samples=[], **sample_values):
raise NotImplementedError('Cannot sample a TimeSeries.')
def reduce(self, dimensions=[], function=None, **reduce_map):
raise NotImplementedError('Reduction of TimeSeries not '
'implemented.')
[docs]class Bivariate(Chart):
"""
Bivariate Views are containers for two dimensional data,
which is to be visualized as a kernel density estimate. The
data should be supplied as an Nx2 array, containing the x-
and y-data.
"""
kdims = param.List(default=[Dimension('x'), Dimension('y')])
vdims = param.List(default=[], bounds=(0,1))
group = param.String(default="Bivariate", constant=True)
[docs]class Distribution(Chart):
"""
Distribution Views provide a container for data to be
visualized as a one-dimensional distribution. The data should
be supplied as a simple one-dimensional array or
list. Internally it uses Seaborn to make all the conversions.
"""
kdims = param.List(default=[])
group = param.String(default='Distribution', constant=True)
vdims = param.List(default=[Dimension('Value')])
_auto_indexable_1d = False
[docs]class Regression(Scatter):
"""
Regression is identical to a Scatter plot but is visualized
using the Seaborn regplot interface. This allows it to
implement linear regressions, confidence intervals and a lot
more.
"""
group = param.String(default='Regression', constant=True)
[docs]class DFrame(PandasDFrame):
"""
The SNSFrame is largely the same as a DFrame but can only be
visualized via Seaborn plotting functions. Since most Seaborn
plots are two dimensional, the x and y dimensions can be set
directly on this class to visualize a particular relationship
in a multi-dimensional Pandas dframe.
"""
plot_type = param.ObjectSelector(default=None,
objects=['interact', 'regplot',
'lmplot', 'corrplot',
'plot', 'boxplot',
'hist', 'scatter_matrix',
'autocorrelation_plot',
'pairgrid', 'facetgrid',
'pairplot', 'violinplot',
'factorplot',
None],
doc="""Selects which Pandas or Seaborn plot
type to use, when visualizing the plot.""")
__all__ = ['DFrame', 'Bivariate', 'Distribution',
'TimeSeries', 'Regression']