org.jfree.chart.plot
Class SpiderWebPlot

java.lang.Object
  extended byorg.jfree.chart.plot.Plot
      extended byorg.jfree.chart.plot.SpiderWebPlot
All Implemented Interfaces:
AxisChangeListener, java.lang.Cloneable, DatasetChangeListener, java.util.EventListener, LegendItemSource, java.io.Serializable

public class SpiderWebPlot
extends Plot
implements java.lang.Cloneable, java.io.Serializable

A plot that displays data from a CategoryDataset in the form of a "spider web". Multiple series can be plotted on the same axis to allow easy comparison.

See Also:
Serialized Form

Field Summary
static double DEFAULT_AXIS_LABEL_GAP
          The default axis label gap (currently 10%).
static double DEFAULT_HEAD
          The default head radius percent (currently 1%).
static double DEFAULT_INTERIOR_GAP
          The default interior gap.
static java.awt.Paint DEFAULT_LABEL_BACKGROUND_PAINT
          The default series label background paint.
static java.awt.Font DEFAULT_LABEL_FONT
          The default series label font.
static java.awt.Paint DEFAULT_LABEL_OUTLINE_PAINT
          The default series label outline paint.
static java.awt.Stroke DEFAULT_LABEL_OUTLINE_STROKE
          The default series label outline stroke.
static java.awt.Paint DEFAULT_LABEL_PAINT
          The default series label paint.
static java.awt.Paint DEFAULT_LABEL_SHADOW_PAINT
          The default series label shadow paint.
static double DEFAULT_MAX_VALUE
          The default maximum value plotted - forces the plot to evaluate the maximum from the data passed in
static double DEFAULT_START_ANGLE
          The default starting angle for the radar chart axes.
protected  double headPercent
          The head radius as a percentage of the available drawing area.
static double MAX_INTERIOR_GAP
          The maximum interior gap (currently 40%).
 
Fields inherited from class org.jfree.chart.plot.Plot
DEFAULT_BACKGROUND_ALPHA, DEFAULT_BACKGROUND_PAINT, DEFAULT_FOREGROUND_ALPHA, DEFAULT_INSETS, DEFAULT_LEGEND_ITEM_BOX, DEFAULT_LEGEND_ITEM_CIRCLE, DEFAULT_OUTLINE_PAINT, DEFAULT_OUTLINE_STROKE, MINIMUM_HEIGHT_TO_DRAW, MINIMUM_WIDTH_TO_DRAW, ZERO
 
Constructor Summary
SpiderWebPlot(CategoryDataset dataset)
          Creates a new radar plot with default attributes.
SpiderWebPlot(CategoryDataset data, TableOrder type)
          Creates a new radar plot overriding the data extraction order.
 
Method Summary
protected  java.awt.geom.Point2D calculateLabelLocation(java.awt.geom.Rectangle2D labelBounds, double ascent, java.awt.geom.Rectangle2D plotArea, double startAngle)
          Returns the location for a label
 void draw(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D plotArea, PlotState parentState, PlotRenderingInfo info)
          Draws the plot on a Java 2D graphics device (such as the screen or a printer).
protected  void drawLabel(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D plotArea, double value, int cat, double startAngle, double extent)
          Draws the label for one axis.
protected  void drawRadarPoly(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D plotArea, java.awt.geom.Point2D centre, PlotRenderingInfo info, int series, int catCount, double headH, double headW)
          Draws a radar plot polygon.
 java.awt.Paint getBaseSeriesOutlinePaint()
          Returns the base series paint.
 java.awt.Stroke getBaseSeriesOutlineStroke()
          Returns the base series stroke.
 java.awt.Paint getBaseSeriesPaint()
          Returns the base series paint.
 TableOrder getDataExtractOrder()
          Returns the data extract order (by row or by column).
 Rotation getDirection()
          Returns the direction in which the radar axes are drawn (clockwise or anti-clockwise).
 double getInteriorGap()
          Returns the interior gap, measured as a percentage of the available drawing space.
 java.awt.Font getLabelFont()
          Returns the series label font.
 CategoryLabelGenerator getLabelGenerator()
          Returns the label generator.
 java.awt.Paint getLabelPaint()
          Returns the series label paint.
 LegendItemCollection getLegendItems()
          Returns a collection of legend items for the radar chart.
 java.awt.Shape getLegendItemShape()
          Returns the shape used for legend items.
 double getMaxValue()
          Returns the maximum value any category axis can take.
 java.lang.String getPlotType()
          Returns a short string describing the type of plot.
 java.awt.Paint getSeriesOutlinePaint()
          Returns the outline paint for ALL series in the plot.
 java.awt.Paint getSeriesOutlinePaint(int series)
          Returns the paint for the specified series.
 java.awt.Stroke getSeriesOutlineStroke()
          Returns the outline stroke for ALL series in the plot.
 java.awt.Stroke getSeriesOutlineStroke(int series)
          Returns the stroke for the specified series.
 java.awt.Paint getSeriesPaint()
          Returns the paint for ALL series in the plot.
 java.awt.Paint getSeriesPaint(int series)
          Returns the paint for the specified series.
 double getStartAngle()
          Returns the start angle for the first radar axis.
protected  java.awt.geom.Point2D getWebPoint(java.awt.geom.Rectangle2D bounds, double angle, double length)
          Returns a cartesian point from a polar angle, length and bounding box
 boolean isWebFilled()
          Method to determine if the web chart is to be filled.
 void setBaseSeriesOutlinePaint(java.awt.Paint paint)
          Sets the base series paint.
 void setBaseSeriesOutlineStroke(java.awt.Stroke stroke)
          Sets the base series stroke.
 void setBaseSeriesPaint(java.awt.Paint paint)
          Sets the base series paint.
 void setDataExtractOrder(TableOrder order)
          Sets the data extract order (by row or by column) and sends a PlotChangeEventto all registered listeners.
 void setDirection(Rotation direction)
          Sets the direction in which the radar axes are drawn and sends a PlotChangeEvent to all registered listeners.
 void setInteriorGap(double percent)
          Sets the interior gap and sends a PlotChangeEvent to all registered listeners.
 void setLabelFont(java.awt.Font font)
          Sets the series label font and sends a PlotChangeEvent to all registered listeners.
 void setLabelGenerator(CategoryLabelGenerator generator)
          Sets the label generator and sends a PlotChangeEvent to all registered listeners.
 void setLabelPaint(java.awt.Paint paint)
          Sets the series label paint and sends a PlotChangeEvent to all registered listeners.
 void setLegendItemShape(java.awt.Shape shape)
          Sets the shape used for legend items.
 void setMaxValue(double value)
          Sets the maximum value any category axis can take and sends a PlotChangeEvent to all registered listeners.
 void setSeriesOutlinePaint(int series, java.awt.Paint paint)
          Sets the paint used to fill a series of the radar and sends a PlotChangeEvent to all registered listeners.
 void setSeriesOutlinePaint(java.awt.Paint paint)
          Sets the outline paint for ALL series in the plot.
 void setSeriesOutlineStroke(int series, java.awt.Stroke stroke)
          Sets the stroke used to fill a series of the radar and sends a PlotChangeEvent to all registered listeners.
 void setSeriesOutlineStroke(java.awt.Stroke stroke)
          Sets the outline stroke for ALL series in the plot.
 void setSeriesPaint(int series, java.awt.Paint paint)
          Sets the paint used to fill a series of the radar and sends a PlotChangeEvent to all registered listeners.
 void setSeriesPaint(java.awt.Paint paint)
          Sets the paint for ALL series in the plot.
 void setStartAngle(double angle)
          Sets the starting angle and sends a PlotChangeEvent to all registered listeners.
 void setWebFilled(boolean flag)
          Sets the webFilled flag and sends a PlotChangeEvent to all registered listeners.
 
Methods inherited from class org.jfree.chart.plot.Plot
addChangeListener, axisChanged, clone, datasetChanged, draw, drawBackground, drawBackgroundImage, drawNoDataMessage, drawOutline, equals, fillBackground, getBackgroundAlpha, getBackgroundImage, getBackgroundImageAlignment, getBackgroundPaint, getDataAreaRatio, getDatasetGroup, getDrawingSupplier, getForegroundAlpha, getInsets, getNoDataMessage, getNoDataMessageFont, getNoDataMessagePaint, getOutlinePaint, getOutlineStroke, getParent, getRectX, getRectY, getRootPlot, handleClick, isSubplot, notifyListeners, removeChangeListener, resolveDomainAxisLocation, resolveRangeAxisLocation, setBackgroundAlpha, setBackgroundImage, setBackgroundImageAlignment, setBackgroundPaint, setDataAreaRatio, setDatasetGroup, setDrawingSupplier, setForegroundAlpha, setInsets, setInsets, setNoDataMessage, setNoDataMessageFont, setNoDataMessagePaint, setOutlinePaint, setOutlineStroke, setParent, zoom
 
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_HEAD

public static final double DEFAULT_HEAD
The default head radius percent (currently 1%).

See Also:
Constant Field Values

DEFAULT_AXIS_LABEL_GAP

public static final double DEFAULT_AXIS_LABEL_GAP
The default axis label gap (currently 10%).

See Also:
Constant Field Values

DEFAULT_INTERIOR_GAP

public static final double DEFAULT_INTERIOR_GAP
The default interior gap.

See Also:
Constant Field Values

MAX_INTERIOR_GAP

public static final double MAX_INTERIOR_GAP
The maximum interior gap (currently 40%).

See Also:
Constant Field Values

DEFAULT_START_ANGLE

public static final double DEFAULT_START_ANGLE
The default starting angle for the radar chart axes.

See Also:
Constant Field Values

DEFAULT_LABEL_FONT

public static final java.awt.Font DEFAULT_LABEL_FONT
The default series label font.


DEFAULT_LABEL_PAINT

public static final java.awt.Paint DEFAULT_LABEL_PAINT
The default series label paint.


DEFAULT_LABEL_BACKGROUND_PAINT

public static final java.awt.Paint DEFAULT_LABEL_BACKGROUND_PAINT
The default series label background paint.


DEFAULT_LABEL_OUTLINE_PAINT

public static final java.awt.Paint DEFAULT_LABEL_OUTLINE_PAINT
The default series label outline paint.


DEFAULT_LABEL_OUTLINE_STROKE

public static final java.awt.Stroke DEFAULT_LABEL_OUTLINE_STROKE
The default series label outline stroke.


DEFAULT_LABEL_SHADOW_PAINT

public static final java.awt.Paint DEFAULT_LABEL_SHADOW_PAINT
The default series label shadow paint.


DEFAULT_MAX_VALUE

public static final double DEFAULT_MAX_VALUE
The default maximum value plotted - forces the plot to evaluate the maximum from the data passed in

See Also:
Constant Field Values

headPercent

protected double headPercent
The head radius as a percentage of the available drawing area.

Constructor Detail

SpiderWebPlot

public SpiderWebPlot(CategoryDataset dataset)
Creates a new radar plot with default attributes.

Parameters:
dataset - the dataset.

SpiderWebPlot

public SpiderWebPlot(CategoryDataset data,
                     TableOrder type)
Creates a new radar plot overriding the data extraction order.

Parameters:
data - the data.
type - controls how radar data is extracted (BY_ROW or BY_COLUMN).
Method Detail

getPlotType

public java.lang.String getPlotType()
Returns a short string describing the type of plot.

Specified by:
getPlotType in class Plot
Returns:
The plot type.

isWebFilled

public boolean isWebFilled()
Method to determine if the web chart is to be filled.

Returns:
A boolean.

setWebFilled

public void setWebFilled(boolean flag)
Sets the webFilled flag and sends a PlotChangeEvent to all registered listeners.

Parameters:
flag - the flag.

getDataExtractOrder

public TableOrder getDataExtractOrder()
Returns the data extract order (by row or by column).

Returns:
The data extract order (never null).

setDataExtractOrder

public void setDataExtractOrder(TableOrder order)
Sets the data extract order (by row or by column) and sends a PlotChangeEventto all registered listeners.

Parameters:
order - the order (null not permitted).

getStartAngle

public double getStartAngle()
Returns the start angle for the first radar axis.
This is measured in degrees starting from 3 o'clock (Java Arc2D default) and measuring anti-clockwise.

Returns:
The start angle.

setStartAngle

public void setStartAngle(double angle)
Sets the starting angle and sends a PlotChangeEvent to all registered listeners.

The initial default value is 90 degrees, which corresponds to 12 o'clock. A value of zero corresponds to 3 o'clock... this is the encoding used by Java's Arc2D class.

Parameters:
angle - the angle (in degrees).

getMaxValue

public double getMaxValue()
Returns the maximum value any category axis can take.

Returns:
The maximum value.

setMaxValue

public void setMaxValue(double value)
Sets the maximum value any category axis can take and sends a PlotChangeEvent to all registered listeners.

Parameters:
value - the maximum value.

getDirection

public Rotation getDirection()
Returns the direction in which the radar axes are drawn (clockwise or anti-clockwise).

Returns:
the direction (never null).

setDirection

public void setDirection(Rotation direction)
Sets the direction in which the radar axes are drawn and sends a PlotChangeEvent to all registered listeners.

Parameters:
direction - the direction (null not permitted).

getInteriorGap

public double getInteriorGap()
Returns the interior gap, measured as a percentage of the available drawing space.

Returns:
The gap (as a percentage of the available drawing space).

setInteriorGap

public void setInteriorGap(double percent)
Sets the interior gap and sends a PlotChangeEvent to all registered listeners. This controls the space between the edges of the plot and the plot area itself (the region where the axis labels appear).

Parameters:
percent - the gap (as a percentage of the available drawing space).

getSeriesPaint

public java.awt.Paint getSeriesPaint()
Returns the paint for ALL series in the plot.

Returns:
The paint (possibly null).

setSeriesPaint

public void setSeriesPaint(java.awt.Paint paint)
Sets the paint for ALL series in the plot. If this is set to null , then a list of paints is used instead (to allow different colors to be used for each series of the radar group).

Parameters:
paint - the paint (null permitted).

getSeriesPaint

public java.awt.Paint getSeriesPaint(int series)
Returns the paint for the specified series.

Parameters:
series - the series index (zero-based).
Returns:
The paint (never null).

setSeriesPaint

public void setSeriesPaint(int series,
                           java.awt.Paint paint)
Sets the paint used to fill a series of the radar and sends a PlotChangeEvent to all registered listeners.

Parameters:
series - the series index (zero-based).
paint - the paint (null permitted).

getBaseSeriesPaint

public java.awt.Paint getBaseSeriesPaint()
Returns the base series paint. This is used when no other paint is available.

Returns:
The paint (never null).

setBaseSeriesPaint

public void setBaseSeriesPaint(java.awt.Paint paint)
Sets the base series paint.

Parameters:
paint - the paint (null not permitted).

getSeriesOutlinePaint

public java.awt.Paint getSeriesOutlinePaint()
Returns the outline paint for ALL series in the plot.

Returns:
The paint (possibly null).

setSeriesOutlinePaint

public void setSeriesOutlinePaint(java.awt.Paint paint)
Sets the outline paint for ALL series in the plot. If this is set to null, then a list of paints is used instead (to allow different colors to be used for each series).

Parameters:
paint - the paint (null permitted).

getSeriesOutlinePaint

public java.awt.Paint getSeriesOutlinePaint(int series)
Returns the paint for the specified series.

Parameters:
series - the series index (zero-based).
Returns:
The paint (never null).

setSeriesOutlinePaint

public void setSeriesOutlinePaint(int series,
                                  java.awt.Paint paint)
Sets the paint used to fill a series of the radar and sends a PlotChangeEvent to all registered listeners.

Parameters:
series - the series index (zero-based).
paint - the paint (null permitted).

getBaseSeriesOutlinePaint

public java.awt.Paint getBaseSeriesOutlinePaint()
Returns the base series paint. This is used when no other paint is available.

Returns:
The paint (never null).

setBaseSeriesOutlinePaint

public void setBaseSeriesOutlinePaint(java.awt.Paint paint)
Sets the base series paint.

Parameters:
paint - the paint (null not permitted).

getSeriesOutlineStroke

public java.awt.Stroke getSeriesOutlineStroke()
Returns the outline stroke for ALL series in the plot.

Returns:
The stroke (possibly null).

setSeriesOutlineStroke

public void setSeriesOutlineStroke(java.awt.Stroke stroke)
Sets the outline stroke for ALL series in the plot. If this is set to null, then a list of paints is used instead (to allow different colors to be used for each series).

Parameters:
stroke - the stroke (null permitted).

getSeriesOutlineStroke

public java.awt.Stroke getSeriesOutlineStroke(int series)
Returns the stroke for the specified series.

Parameters:
series - the series index (zero-based).
Returns:
The stroke (never null).

setSeriesOutlineStroke

public void setSeriesOutlineStroke(int series,
                                   java.awt.Stroke stroke)
Sets the stroke used to fill a series of the radar and sends a PlotChangeEvent to all registered listeners.

Parameters:
series - the series index (zero-based).
stroke - the stroke (null permitted).

getBaseSeriesOutlineStroke

public java.awt.Stroke getBaseSeriesOutlineStroke()
Returns the base series stroke. This is used when no other stroke is available.

Returns:
The stroke (never null).

setBaseSeriesOutlineStroke

public void setBaseSeriesOutlineStroke(java.awt.Stroke stroke)
Sets the base series stroke.

Parameters:
stroke - the stroke (null not permitted).

getLegendItemShape

public java.awt.Shape getLegendItemShape()
Returns the shape used for legend items.

Returns:
The shape.

setLegendItemShape

public void setLegendItemShape(java.awt.Shape shape)
Sets the shape used for legend items.

Parameters:
shape - the shape (null not permitted).

getLabelFont

public java.awt.Font getLabelFont()
Returns the series label font.

Returns:
The font (never null).

setLabelFont

public void setLabelFont(java.awt.Font font)
Sets the series label font and sends a PlotChangeEvent to all registered listeners.

Parameters:
font - the font (null not permitted).

getLabelPaint

public java.awt.Paint getLabelPaint()
Returns the series label paint.

Returns:
The paint (never null).

setLabelPaint

public void setLabelPaint(java.awt.Paint paint)
Sets the series label paint and sends a PlotChangeEvent to all registered listeners.

Parameters:
paint - the paint (null not permitted).

getLabelGenerator

public CategoryLabelGenerator getLabelGenerator()
Returns the label generator.

Returns:
The label generator (never null).

setLabelGenerator

public void setLabelGenerator(CategoryLabelGenerator generator)
Sets the label generator and sends a PlotChangeEvent to all registered listeners.

Parameters:
generator - the generator (null not permitted).

getLegendItems

public LegendItemCollection getLegendItems()
Returns a collection of legend items for the radar chart.

Specified by:
getLegendItems in interface LegendItemSource
Overrides:
getLegendItems in class Plot
Returns:
The legend items.

getWebPoint

protected java.awt.geom.Point2D getWebPoint(java.awt.geom.Rectangle2D bounds,
                                            double angle,
                                            double length)
Returns a cartesian point from a polar angle, length and bounding box

Parameters:
bounds - the area inside which the point needs to be.
angle - the polar angle, in degrees.
length - the relative length. Given in percent of maximum extend.
Returns:
The cartesian point.

draw

public void draw(java.awt.Graphics2D g2,
                 java.awt.geom.Rectangle2D plotArea,
                 PlotState parentState,
                 PlotRenderingInfo info)
Draws the plot on a Java 2D graphics device (such as the screen or a printer).

Specified by:
draw in class Plot
Parameters:
g2 - the graphics device.
plotArea - the area within which the plot should be drawn.
parentState - the state from the parent plot, if there is one.
info - collects info about the drawing.

drawRadarPoly

protected void drawRadarPoly(java.awt.Graphics2D g2,
                             java.awt.geom.Rectangle2D plotArea,
                             java.awt.geom.Point2D centre,
                             PlotRenderingInfo info,
                             int series,
                             int catCount,
                             double headH,
                             double headW)
Draws a radar plot polygon.

Parameters:
g2 - the graphics device.
plotArea - the area we are plotting in (already adjusted).
centre - the centre point of the radar axes
info - chart rendering info.
series - the series within the dataset we are plotting
catCount - the number of categories per radar plot
headH - the data point height
headW - the data point width

drawLabel

protected void drawLabel(java.awt.Graphics2D g2,
                         java.awt.geom.Rectangle2D plotArea,
                         double value,
                         int cat,
                         double startAngle,
                         double extent)
Draws the label for one axis.

Parameters:
g2 - the graphics device.
plotArea - the plot area
value - the value of the label.
cat - the category (zero-based index).
startAngle - the starting angle.
extent - the extent of the arc.

calculateLabelLocation

protected java.awt.geom.Point2D calculateLabelLocation(java.awt.geom.Rectangle2D labelBounds,
                                                       double ascent,
                                                       java.awt.geom.Rectangle2D plotArea,
                                                       double startAngle)
Returns the location for a label

Parameters:
labelBounds - the label bounds.
ascent - the ascent (height of font).
plotArea - the plot area
startAngle - the start angle for the pie series.
Returns:
the location for a label.