# Interface Plotter<S extends Style>

All Known Subinterfaces:
  `ModePlotter<S>, ShapeModePlotter`

All Known Implementing Classes:
  `AbstractKernelDensityPlotter, AbstractPlotter, ArrayShapePlotter, CombineArrayPlotter, ContourPlotter, DensogramPlotter, FillPlotter, FixedKernelDensityPlotter, FunctionPlotter, GridPlotter, HealpixPlotter, HistogramPlotter, KnnKernelDensityPlotter, LabelPlotter, Line3dPlotter, LinearFitPlotter, LineCombineArrayPlotter, LinePlotter, MarkCombineArrayPlotter, Pixel1dPlotter, ShapePlotter, SimpleDecalPlotter, SkyDensityPlotter, SkyGridPlotter, SpectrogramPlotter, SphereGridPlotter, SpotPlotter, Stats1Plotter, TracePlotter`

public interface Plotter<S extends Style>
A Plotter can produce PlotLayers given data and appropriate configuration. It can also report what data coordinates and style configuration information are needed for the plot. This self-describing nature means that a plotting framework can largely build a user interface automatically from a Plotter instance.

A Plotter also acts as part of an identifier for the type of plot being performed, which is necessary for determining PlotLayer equality; two PlotLayers are equivalent if they match in point of DataSpec, Style and Plotter.

Since:
  11 Feb 2013
Author:
  Mark Taylor

## Method Summary

Modifier and Type
Method
Description
`PlotLayer`
`createLayer(DataGeom pointDataGeom, DataSpec dataSpec, S style)`
Creates a PlotLayer based on the given geometry, data and style.
`S`
`createStyle(ConfigMap config)`
Creates a style that can be used when creating a plot layer.
`CoordGroup`
`getCoordGroup()`
Returns an object describing which data coordinates are used for this plotter and how they are arranged in supplied DataSpec objects.
`String`
`getPlotterDescription()`
Returns an XML description of this plotter.
`Icon`
`getPlotterIcon()`
Returns an icon for this plotter for use in user interface.
`String`
`getPlotterName()`
Returns the name of this plotter for use in user interface.
`Object`
`getRangeStyleKey(S 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.
`boolean`
`hasReports()`
Indicates whether the drawings produced by this plotter will return general interest report information to upstream plotting code.

## Method Details

### getPlotterName

String getPlotterName()
Returns the name of this plotter for use in user interface.

Returns:
  user-directed plotter name

### getPlotterIcon

Icon getPlotterIcon()
Returns an icon for this plotter for use in user interface.

Returns:
  plotter icon

### getPlotterDescription

String getPlotterDescription()
Returns an XML description of this plotter.

Note: really this should appear at the LayerType level.

Returns:
  one or more <p> elements

### getCoordGroup

CoordGroup getCoordGroup()
Returns an object describing which data coordinates are used for this plotter and how they are arranged in supplied DataSpec objects.

Returns:
  coordinate group

### getStyleKeys

ConfigKey<?>[] getStyleKeys()
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 `createStyle(ConfigMap)` method.

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

### createStyle

S createStyle(ConfigMap config) throws ConfigException
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 `getStyleKeys()`. The return value can be used as input to `createLayer(DataGeom, DataSpec, S)`.

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

### hasReports

boolean hasReports()
Indicates whether the drawings produced by this plotter will return general interest report information to upstream plotting code.

Returns:
  true if the plot report may return interesting information
See Also:
  - `Drawing.getReport(Object)`

### getRangeStyleKey

@Equality Object getRangeStyleKey(S style)
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

### createLayer

PlotLayer createLayer(DataGeom pointDataGeom, DataSpec dataSpec, S style)
Creates a PlotLayer based on the given geometry, data and style.

The `style` parameter is the result of a call to `createStyle(ConfigMap)`.

The `dataSpec` parameter must contain the coordinates defined by this plotter's CoordGroup.

The `pointDataGeom` parameter is only used if the `CoordGroup.getBasicPositionCount()` or `CoordGroup.getExtraPositionCount()` method from this plotter's CoordGroup return a non-zero value, otherwise the plot does not have point positions.

It is legal to supply null for any of the parameters; if insufficient data is supplied to generate a plot, then the method should return null.

Creating a layer should be cheap; layers may be created and not used.

Parameters:
  `pointDataGeom` - indicates base position coordinates and their mapping to points in the data space
  `dataSpec` - specifies the data required for the plot
  `style` - data style as obtained from `createStyle`
Returns:
  new plot layer, or null if no drawing will take place