Source code for holoviews.plotting.plotly.stats

from __future__ import absolute_import, division, unicode_literals

import param

from .selection import PlotlyOverlaySelectionDisplay
from .chart import ChartPlot
from .element import ElementPlot, ColorbarPlot


[docs]class BivariatePlot(ChartPlot, ColorbarPlot): filled = param.Boolean(default=False) ncontours = param.Integer(default=None) trace_kwargs = {'type': 'histogram2dcontour'} style_opts = ['visible', 'cmap', 'showlabels', 'labelfont', 'labelformat', 'showlines'] _style_key = 'contours' selection_display = PlotlyOverlaySelectionDisplay() def graph_options(self, element, ranges, style): opts = super(BivariatePlot, self).graph_options(element, ranges, style) copts = self.get_color_opts(element.vdims[0], element, ranges, style) if self.ncontours: opts['autocontour'] = False opts['ncontours'] = self.ncontours # Make line width a little wider (default is less than 1) opts['line'] = {'width': 1} # Configure contours opts['contours'] = { 'coloring': 'fill' if self.filled else 'lines', 'showlines': style.get('showlines', True) } # Add colorscale opts['colorscale'] = copts['colorscale'] # Add colorbar if 'colorbar' in copts: opts['colorbar'] = copts['colorbar'] opts['showscale'] = copts.get('showscale', False) # Add visible opts['visible'] = style.get('visible', True) return opts
[docs]class DistributionPlot(ElementPlot): bandwidth = param.Number(default=None, doc=""" The bandwidth of the kernel for the density estimate.""") cut = param.Number(default=3, doc=""" Draw the estimate to cut * bw from the extreme data points.""") filled = param.Boolean(default=True, doc=""" Whether the bivariate contours should be filled.""") style_opts = ['visible', 'color', 'dash', 'line_width'] trace_kwargs = {'type': 'scatter', 'mode': 'lines'} _style_key = 'line' selection_display = PlotlyOverlaySelectionDisplay()
[docs]class MultiDistributionPlot(ElementPlot): def _get_axis_dims(self, element): return element.kdims, element.vdims[0] def get_data(self, element, ranges, style): if element.kdims: groups = element.groupby(element.kdims).items() else: groups = [(element.label, element)] plots = [] axis = 'x' if self.invert_axes else 'y' for key, group in groups: if element.kdims: label = ','.join([d.pprint_value(v) for d, v in zip(element.kdims, key)]) else: label = key data = {axis: group.dimension_values(group.vdims[0]), 'name': label} plots.append(data) return plots
[docs] def get_extents(self, element, ranges, range_type='combined'): return super(MultiDistributionPlot, self).get_extents( element, ranges, range_type, 'categorical', element.vdims[0] )
[docs]class BoxWhiskerPlot(MultiDistributionPlot): boxpoints = param.ObjectSelector(objects=["all", "outliers", "suspectedoutliers", False], default='outliers', doc=""" Which points to show, valid options are 'all', 'outliers', 'suspectedoutliers' and False""") jitter = param.Number(default=0, doc=""" Sets the amount of jitter in the sample points drawn. If "0", the sample points align along the distribution axis. If "1", the sample points are drawn in a random jitter of width equal to the width of the box(es).""") mean = param.ObjectSelector(default=False, objects=[True, False, 'sd'], doc=""" If "True", the mean of the box(es)' underlying distribution is drawn as a dashed line inside the box(es). If "sd" the standard deviation is also drawn.""") style_opts = ['visible', 'color', 'alpha', 'outliercolor', 'marker', 'size'] trace_kwargs = {'type': 'box'} _style_key = 'marker' selection_display = PlotlyOverlaySelectionDisplay() def graph_options(self, element, ranges, style): options = super(BoxWhiskerPlot, self).graph_options(element, ranges, style) options['boxmean'] = self.mean options['jitter'] = self.jitter return options
[docs]class ViolinPlot(MultiDistributionPlot): box = param.Boolean(default=True, doc=""" Whether to draw a boxplot inside the violin""") meanline = param.Boolean(default=False, doc=""" If "True", the mean of the box(es)' underlying distribution is drawn as a dashed line inside the box(es). If "sd" the standard deviation is also drawn.""") style_opts = ['visible', 'color', 'alpha', 'outliercolor', 'marker', 'size'] trace_kwargs = {'type': 'violin'} _style_key = 'marker' def graph_options(self, element, ranges, style): options = super(ViolinPlot, self).graph_options(element, ranges, style) options['meanline'] = {'visible': self.meanline} options['box'] = {'visible': self.box} return options