# Class AbstractKernelDensityPlotter

java.lang.Object
uk.ac.starlink.ttools.plot2.layer.Pixel1dPlotter<AbstractKernelDensityPlotter.KDenseStyle>
uk.ac.starlink.ttools.plot2.layer.AbstractKernelDensityPlotter

All Implemented Interfaces:
  `Plotter<AbstractKernelDensityPlotter.KDenseStyle>`

Direct Known Subclasses:
  `FixedKernelDensityPlotter, KnnKernelDensityPlotter`

public abstract class AbstractKernelDensityPlotter extends Pixel1dPlotter<AbstractKernelDensityPlotter.KDenseStyle>
Abstract superclass for a plotter that plots something that looks like a kernel density estimate. In fact, for reasons of efficiency and implementation, it's a histogram with pixel-sized bins, but it looks pretty much the same.

Concrete subclasses have to arrange for the details of exactly how kernels are instantiated from a given kernel shape.

Since:
  17 Feb 2015
Author:
  Mark Taylor

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static class`
`AbstractKernelDensityPlotter.KDenseStyle`
Style subclass for kernel density plots.
`static interface`
`AbstractKernelDensityPlotter.KernelFigure`
Encapsulates the details of smoothing kernel construction.

### Nested classes/interfaces inherited from class Pixel1dPlotter

`Pixel1dPlotter.BinArray, Pixel1dPlotter.Pixel1dPlan`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final ReportKey<double[]>`
`BINS_KEY`
Report key for plotted bin height in data coordinates.
`static final ConfigKey<Normalisation>`
`NORMALISE_KEY`
Config key for normalisation.
`static final ConfigKey<Integer>`
`THICK_KEY`
Config key for line thickness (only effective if fill==false).

### Fields inherited from class Pixel1dPlotter

`KERNEL_KEY, SMOOTHSIZER_KEY, SMOOTHWIDTH_KEY`

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`AbstractKernelDensityPlotter(FloatingCoord xCoord, boolean hasWeight, PerUnitConfigKey<Unit> unitKey, String name, Icon icon)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`protected abstract AbstractKernelDensityPlotter.KernelFigure`
`createKernelFigure(ConfigMap config)`
Constructs an object for plot-time kernel construction based on a particular config map.
`AbstractKernelDensityPlotter.KDenseStyle`
`createStyle(ConfigMap config)`
Creates a style that can be used when creating a plot layer.
`protected void`
`extendPixel1dCoordinateRanges(Range[] ranges, boolean[] logFlags, AbstractKernelDensityPlotter.KDenseStyle style, DataSpec dataSpec, DataStore dataStore)`
Performs any required range extension.
`protected Combiner`
`getCombiner(AbstractKernelDensityPlotter.KDenseStyle style)`
Returns the bin aggregation mode implied by a given style.
`protected abstract ConfigKey<?>[]`
`getKernelConfigKeys()`
Returns a list of keys that specify how the smoothing kernel will be configured.
`protected LayerOpt`
`getLayerOpt(AbstractKernelDensityPlotter.KDenseStyle style)`
Returns the LayerOpt suitable for a given style for this plotter.
`protected ReportMap`
`getPixel1dReport(Pixel1dPlotter.Pixel1dPlan plan, AbstractKernelDensityPlotter.KDenseStyle style, boolean xLog)`
Returns information associated with the plot.
`protected int`
`getPixelPadding(AbstractKernelDensityPlotter.KDenseStyle style, PlanarSurface surf)`
Returns the padding required at both ends of the array of pixel bins for calculations.
`Object`
`getRangeStyleKey(AbstractKernelDensityPlotter.KDenseStyle style)`
Returns an opaque object characterising the region of the plot surface covered when using a given plotter style.
`ConfigKey<?>[]`
`getStyleKeys()`
Returns the configuration keys used to configure style for this plotter.
`protected boolean`
`isY(AbstractKernelDensityPlotter.KDenseStyle style)`
Returns the sideways flag implied by a given style.
`protected void`
`paintBins(PlanarSurface surface, Pixel1dPlotter.BinArray binArray, AbstractKernelDensityPlotter.KDenseStyle style, Graphics2D g)`
Draws the graphical representation of a given array of counts per horizontal pixel.

### Methods inherited from class Pixel1dPlotter

`createKernel, createLayer, getCombinerKey, getCoordGroup, getDataBins, getEffectiveExtent, getPixelWidth, getPlotterIcon, getPlotterName, getWeightCoordIndex, getWeightingDescription, hasReports, readBins`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface Plotter

`getPlotterDescription`

## Field Details

### BINS_KEY

public static final ReportKey<double[]> BINS_KEY
Report key for plotted bin height in data coordinates.

### THICK_KEY

public static final ConfigKey<Integer> THICK_KEY
Config key for line thickness (only effective if fill==false).

### NORMALISE_KEY

public static final ConfigKey<Normalisation> NORMALISE_KEY
Config key for normalisation.

## Constructor Details

### AbstractKernelDensityPlotter

protected AbstractKernelDensityPlotter(FloatingCoord xCoord, boolean hasWeight, PerUnitConfigKey<Unit> unitKey, String name, Icon icon)
Constructor.

Parameters:
  `xCoord` - X axis coordinate
  `hasWeight` - true to permit histogram weighting
  `unitKey` - config key to select X axis physical units, or null if no unit selection required
  `name` - plotter name
  `icon` - plotter icon

## Method Details

### getKernelConfigKeys

protected abstract ConfigKey<?>[] getKernelConfigKeys()
Returns a list of keys that specify how the smoothing kernel will be configured.

Returns:
  list of implementation-specific kernel config keys

### createKernelFigure

protected abstract AbstractKernelDensityPlotter.KernelFigure createKernelFigure(ConfigMap config) throws ConfigException
Constructs an object for plot-time kernel construction based on a particular config map.

Parameters:
  `config` - config map with kernel config keys in it
Throws:
  `ConfigException`
See Also:
  - `getKernelConfigKeys()`

### getStyleKeys

public ConfigKey<?>[] getStyleKeys()
Description copied from interface: `Plotter`
Returns the configuration keys used to configure style for this plotter. The keys in the return value are used in the map supplied to the `Plotter.createStyle(ConfigMap)` method.

Returns:
  keys used when creating a style for this plotter.

### createStyle

public AbstractKernelDensityPlotter.KDenseStyle createStyle(ConfigMap config) throws ConfigException
Description copied from interface: `Plotter`
Creates a style that can be used when creating a plot layer. The keys that are significant in the supplied config map are those returned by `Plotter.getStyleKeys()`. The return value can be used as input to `Plotter.createLayer(DataGeom, DataSpec, S)`.

Parameters:
  `config` - map of style configuration items
Returns:
  plotter-specific plot style
Throws:
  `ConfigException`

### isY

protected boolean isY(AbstractKernelDensityPlotter.KDenseStyle style)
Description copied from class: `Pixel1dPlotter`
Returns the sideways flag implied by a given style.

Specified by:
  `isY` in class `Pixel1dPlotter<AbstractKernelDensityPlotter.KDenseStyle>`
Parameters:
  `style` - plot style
Returns:
  if true, plot is sideways

### getLayerOpt

protected LayerOpt getLayerOpt(AbstractKernelDensityPlotter.KDenseStyle style)
Description copied from class: `Pixel1dPlotter`
Returns the LayerOpt suitable for a given style for this plotter.

Specified by:
  `getLayerOpt` in class `Pixel1dPlotter<AbstractKernelDensityPlotter.KDenseStyle>`
Parameters:
  `style` - plot style
Returns:
  layer option flags

### getPixelPadding

protected int getPixelPadding(AbstractKernelDensityPlotter.KDenseStyle style, PlanarSurface surf)
Description copied from class: `Pixel1dPlotter`
Returns the padding required at both ends of the array of pixel bins for calculations.

Specified by:
  `getPixelPadding` in class `Pixel1dPlotter<AbstractKernelDensityPlotter.KDenseStyle>`
Parameters:
  `style` - plotting style
  `surf` - plotting surface
Returns:
  padding in pixels required in bin array

### getCombiner

protected Combiner getCombiner(AbstractKernelDensityPlotter.KDenseStyle style)
Description copied from class: `Pixel1dPlotter`
Returns the bin aggregation mode implied by a given style.

Specified by:
  `getCombiner` in class `Pixel1dPlotter<AbstractKernelDensityPlotter.KDenseStyle>`
Parameters:
  `style` - plotting style
Returns:
  pixel bin aggregation mode

### paintBins

protected void paintBins(PlanarSurface surface, Pixel1dPlotter.BinArray binArray, AbstractKernelDensityPlotter.KDenseStyle style, Graphics2D g)
Description copied from class: `Pixel1dPlotter`
Draws the graphical representation of a given array of counts per horizontal pixel.

Specified by:
  `paintBins` in class `Pixel1dPlotter<AbstractKernelDensityPlotter.KDenseStyle>`
Parameters:
  `surface` - plotting surface
  `binArray` - counts per X axis pixel
  `style` - plotting style
  `g` - graphics context

### extendPixel1dCoordinateRanges

protected void extendPixel1dCoordinateRanges(Range[] ranges, boolean[] logFlags, AbstractKernelDensityPlotter.KDenseStyle style, DataSpec dataSpec, DataStore dataStore)
Description copied from class: `Pixel1dPlotter`
Performs any required range extension. May be a no-op.

Specified by:
  `extendPixel1dCoordinateRanges` in class `Pixel1dPlotter<AbstractKernelDensityPlotter.KDenseStyle>`
Parameters:
  `ranges` - array of data space dimension ranges to update
  `logFlags` - array of linear/log flags corresponding to ranges
  `style` - plotting style
  `dataSpec` - data specification
  `dataStore` - data storage object
See Also:
  - `PlotLayer.extendCoordinateRanges(Range[], boolean[], DataStore)`

### getRangeStyleKey

public Object getRangeStyleKey(AbstractKernelDensityPlotter.KDenseStyle style)
Description copied from interface: `Plotter`
Returns an opaque object characterising the region of the plot surface covered when using a given plotter style. If this object changes between layers produced by this plotter, it provides a hint that it may be necessary to redetermine the axis ranges (using `extendCoordinateRanges`).

In many cases, such as scatter-plot-like plotters, the range is determined only by the coordinate data (managed by `DataSpec` inputs) so a null value may be returned. This method is chiefly required by histogram-like plotters for which the region on the plot surface is not the union of the input positions.

Parameters:
  `style` - plot style to assess
Returns:
  opaque object with equality semantics, or null if axis range is not a function of style

### getPixel1dReport

protected ReportMap getPixel1dReport(Pixel1dPlotter.Pixel1dPlan plan, AbstractKernelDensityPlotter.KDenseStyle style, boolean xLog)
Description copied from class: `Pixel1dPlotter`
Returns information associated with the plot.

Specified by:
  `getPixel1dReport` in class `Pixel1dPlotter<AbstractKernelDensityPlotter.KDenseStyle>`
Parameters:
  `plan` - plotting plan
  `style` - plot style
  `xLog` - true iff X axis is logarithmic
Returns:
  report info, may be null
See Also:
  - `Drawing.getReport(Object)`