org.jfree.chart.axis

Class NumberAxis

Implemented Interfaces:
Cloneable, PublicCloneable, Serializable
Known Direct Subclasses:
CyclicNumberAxis, LogarithmicAxis, ModuloAxis, NumberAxis3D, SymbolAxis

public class NumberAxis
extends ValueAxis
implements Cloneable, Serializable

An axis for displaying numerical data.

If the axis is set up to automatically determine its range to fit the data, you can ensure that the range includes zero (statisticians usually prefer this) by setting the autoRangeIncludesZero flag to true.

The NumberAxis class has a mechanism for automatically selecting a tick unit that is appropriate for the current axis range. This mechanism is an adaptation of code suggested by Laurence Vanhelsuwe.

Field Summary

static boolean
DEFAULT_AUTO_RANGE_INCLUDES_ZERO
The default value for the autoRangeIncludesZero flag.
static boolean
DEFAULT_AUTO_RANGE_STICKY_ZERO
The default value for the autoRangeStickyZero flag.
static NumberTickUnit
DEFAULT_TICK_UNIT
The default tick unit.
static boolean
DEFAULT_VERTICAL_TICK_LABELS
The default setting for the vertical tick labels flag.

Fields inherited from class org.jfree.chart.axis.ValueAxis

DEFAULT_AUTO_RANGE, DEFAULT_AUTO_RANGE_MINIMUM_SIZE, DEFAULT_AUTO_TICK_UNIT_SELECTION, DEFAULT_INVERTED, DEFAULT_LOWER_BOUND, DEFAULT_LOWER_MARGIN, DEFAULT_RANGE, DEFAULT_UPPER_BOUND, DEFAULT_UPPER_MARGIN, MAXIMUM_TICK_COUNT

Fields inherited from class org.jfree.chart.axis.Axis

DEFAULT_AXIS_LABEL_FONT, DEFAULT_AXIS_LABEL_INSETS, DEFAULT_AXIS_LABEL_PAINT, DEFAULT_AXIS_LINE_PAINT, DEFAULT_AXIS_LINE_STROKE, DEFAULT_AXIS_VISIBLE, DEFAULT_TICK_LABELS_VISIBLE, DEFAULT_TICK_LABEL_FONT, DEFAULT_TICK_LABEL_INSETS, DEFAULT_TICK_LABEL_PAINT, DEFAULT_TICK_MARKS_VISIBLE, DEFAULT_TICK_MARK_INSIDE_LENGTH, DEFAULT_TICK_MARK_OUTSIDE_LENGTH, DEFAULT_TICK_MARK_PAINT, DEFAULT_TICK_MARK_STROKE

Constructor Summary

NumberAxis()
Default constructor.
NumberAxis(String label)
Constructs a number axis, using default values where necessary.

Method Summary

protected void
autoAdjustRange()
Rescales the axis to ensure that all data is visible.
protected double
calculateHighestVisibleTickValue()
Calculates the value of the highest visible tick on the axis.
protected double
calculateLowestVisibleTickValue()
Calculates the value of the lowest visible tick on the axis.
protected int
calculateVisibleTickCount()
Calculates the number of visible ticks.
Object
clone()
Returns a clone of the axis.
void
configure()
Configures the axis to work with the specified plot.
static TickUnitSource
createIntegerTickUnits()
Returns a collection of tick units for integer values.
static TickUnitSource
createIntegerTickUnits(Locale locale)
Returns a collection of tick units for integer values.
static TickUnitSource
createStandardTickUnits()
Creates the standard tick units.
static TickUnitSource
createStandardTickUnits(Locale locale)
Creates a collection of standard tick units.
AxisState
draw(Graphics2D g2, double cursor, Rectangle2D plotArea, Rectangle2D dataArea, RectangleEdge edge, PlotRenderingInfo plotState)
Draws the axis on a Java 2D graphics device (such as the screen or a printer).
boolean
equals(Object obj)
Tests the axis for equality with an arbitrary object.
protected double
estimateMaximumTickLabelHeight(Graphics2D g2)
Estimates the maximum tick label height.
protected double
estimateMaximumTickLabelWidth(Graphics2D g2, TickUnit unit)
Estimates the maximum width of the tick labels, assuming the specified tick unit is used.
boolean
getAutoRangeIncludesZero()
Returns the flag that indicates whether or not the automatic axis range (if indeed it is determined automatically) is forced to include zero.
boolean
getAutoRangeStickyZero()
Returns a flag that affects the auto-range when zero falls outside the data range but inside the margins defined for the axis.
MarkerAxisBand
getMarkerBand()
Returns the (optional) marker band for the axis.
NumberFormat
getNumberFormatOverride()
Returns the number format override.
RangeType
getRangeType()
Returns the axis range type.
NumberTickUnit
getTickUnit()
Returns the tick unit for the axis.
int
hashCode()
Returns a hash code for this object.
double
java2DToValue(double java2DValue, Rectangle2D area, RectangleEdge edge)
Converts a coordinate in Java2D space to the corresponding data value, assuming that the axis runs along one edge of the specified dataArea.
List
refreshTicks(Graphics2D g2, AxisState state, Rectangle2D dataArea, RectangleEdge edge)
Calculates the positions of the tick labels for the axis, storing the results in the tick label list (ready for drawing).
protected List
refreshTicksHorizontal(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge)
Calculates the positions of the tick labels for the axis, storing the results in the tick label list (ready for drawing).
protected List
refreshTicksVertical(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge)
Calculates the positions of the tick labels for the axis, storing the results in the tick label list (ready for drawing).
protected void
selectAutoTickUnit(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge)
Selects an appropriate tick value for the axis.
protected void
selectHorizontalAutoTickUnit(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge)
Selects an appropriate tick value for the axis.
protected void
selectVerticalAutoTickUnit(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge)
Selects an appropriate tick value for the axis.
void
setAutoRangeIncludesZero(boolean flag)
Sets the flag that indicates whether or not the axis range, if automatically calculated, is forced to include zero.
void
setAutoRangeStickyZero(boolean flag)
Sets a flag that affects the auto-range when zero falls outside the data range but inside the margins defined for the axis.
void
setMarkerBand(MarkerAxisBand band)
Sets the marker band for the axis.
void
setNumberFormatOverride(NumberFormat formatter)
Sets the number format override.
void
setRangeType(RangeType rangeType)
Sets the axis range type.
void
setTickUnit(NumberTickUnit unit)
Sets the tick unit for the axis and sends an AxisChangeEvent to all registered listeners.
void
setTickUnit(NumberTickUnit unit, boolean notify, boolean turnOffAutoSelect)
Sets the tick unit for the axis and, if requested, sends an AxisChangeEvent to all registered listeners.
double
valueToJava2D(double value, Rectangle2D area, RectangleEdge edge)
Converts a data value to a coordinate in Java2D space, assuming that the axis runs along one edge of the specified dataArea.

Methods inherited from class org.jfree.chart.axis.ValueAxis

autoAdjustRange, calculateAnchorPoint, centerRange, clone, drawAxisLine, drawTickMarksAndLabels, equals, findMaximumTickLabelHeight, findMaximumTickLabelWidth, getAutoRangeMinimumSize, getAutoTickIndex, getDefaultAutoRange, getDownArrow, getFixedAutoRange, getLeftArrow, getLowerBound, getLowerMargin, getRange, getRightArrow, getStandardTickUnits, getUpArrow, getUpperBound, getUpperMargin, isAutoRange, isAutoTickUnitSelection, isInverted, isNegativeArrowVisible, isPositiveArrowVisible, isVerticalTickLabels, java2DToValue, lengthToJava2D, reserveSpace, resizeRange, resizeRange, setAutoRange, setAutoRange, setAutoRangeMinimumSize, setAutoRangeMinimumSize, setAutoTickIndex, setAutoTickUnitSelection, setAutoTickUnitSelection, setDefaultAutoRange, setDownArrow, setFixedAutoRange, setInverted, setLeftArrow, setLowerBound, setLowerMargin, setNegativeArrowVisible, setPositiveArrowVisible, setRange, setRange, setRange, setRangeAboutValue, setRangeWithMargins, setRangeWithMargins, setRangeWithMargins, setRightArrow, setStandardTickUnits, setUpArrow, setUpperBound, setUpperMargin, setVerticalTickLabels, valueToJava2D, zoomRange

Methods inherited from class org.jfree.chart.axis.Axis

addChangeListener, clone, configure, draw, drawAxisLine, drawLabel, equals, getAxisLinePaint, getAxisLineStroke, getFixedDimension, getLabel, getLabelAngle, getLabelEnclosure, getLabelFont, getLabelInsets, getLabelPaint, getPlot, getTickLabelFont, getTickLabelInsets, getTickLabelPaint, getTickMarkInsideLength, getTickMarkOutsideLength, getTickMarkPaint, getTickMarkStroke, hasListener, isAxisLineVisible, isTickLabelsVisible, isTickMarksVisible, isVisible, notifyListeners, refreshTicks, removeChangeListener, reserveSpace, setAxisLinePaint, setAxisLineStroke, setAxisLineVisible, setFixedDimension, setLabel, setLabelAngle, setLabelFont, setLabelInsets, setLabelPaint, setPlot, setTickLabelFont, setTickLabelInsets, setTickLabelPaint, setTickLabelsVisible, setTickMarkInsideLength, setTickMarkOutsideLength, setTickMarkPaint, setTickMarkStroke, setTickMarksVisible, setVisible

Field Details

DEFAULT_AUTO_RANGE_INCLUDES_ZERO

public static final boolean DEFAULT_AUTO_RANGE_INCLUDES_ZERO
The default value for the autoRangeIncludesZero flag.
Field Value:
true

DEFAULT_AUTO_RANGE_STICKY_ZERO

public static final boolean DEFAULT_AUTO_RANGE_STICKY_ZERO
The default value for the autoRangeStickyZero flag.
Field Value:
true

DEFAULT_TICK_UNIT

public static final NumberTickUnit DEFAULT_TICK_UNIT
The default tick unit.

DEFAULT_VERTICAL_TICK_LABELS

public static final boolean DEFAULT_VERTICAL_TICK_LABELS
The default setting for the vertical tick labels flag.
Field Value:
false

Constructor Details

NumberAxis

public NumberAxis()
Default constructor.

NumberAxis

public NumberAxis(String label)
Constructs a number axis, using default values where necessary.
Parameters:
label - the axis label (null permitted).

Method Details

autoAdjustRange

protected void autoAdjustRange()
Rescales the axis to ensure that all data is visible.
Overrides:
autoAdjustRange in interface ValueAxis

calculateHighestVisibleTickValue

protected double calculateHighestVisibleTickValue()
Calculates the value of the highest visible tick on the axis.
Returns:
The value of the highest visible tick on the axis.

calculateLowestVisibleTickValue

protected double calculateLowestVisibleTickValue()
Calculates the value of the lowest visible tick on the axis.
Returns:
The value of the lowest visible tick on the axis.

calculateVisibleTickCount

protected int calculateVisibleTickCount()
Calculates the number of visible ticks.
Returns:
The number of visible ticks on the axis.

clone

public Object clone()
            throws CloneNotSupportedException
Returns a clone of the axis.
Overrides:
clone in interface ValueAxis
Returns:
A clone

configure

public void configure()
Configures the axis to work with the specified plot. If the axis has auto-scaling, then sets the maximum and minimum values.
Overrides:
configure in interface Axis

createIntegerTickUnits

public static TickUnitSource createIntegerTickUnits()
Returns a collection of tick units for integer values.
Returns:
A collection of tick units for integer values.

createIntegerTickUnits

public static TickUnitSource createIntegerTickUnits(Locale locale)
Returns a collection of tick units for integer values. Uses a given Locale to create the DecimalFormats.
Parameters:
locale - the locale to use to represent Numbers.
Returns:
A collection of tick units for integer values.

createStandardTickUnits

public static TickUnitSource createStandardTickUnits()
Creates the standard tick units.

If you don't like these defaults, create your own instance of TickUnits and then pass it to the setStandardTickUnits() method in the NumberAxis class.

Returns:
The standard tick units.

createStandardTickUnits

public static TickUnitSource createStandardTickUnits(Locale locale)
Creates a collection of standard tick units. The supplied locale is used to create the number formatter (a localised instance of NumberFormat).

If you don't like these defaults, create your own instance of TickUnits and then pass it to the setStandardTickUnits() method.

Parameters:
locale - the locale.
Returns:
A tick unit collection.

draw

public AxisState draw(Graphics2D g2,
                      double cursor,
                      Rectangle2D plotArea,
                      Rectangle2D dataArea,
                      RectangleEdge edge,
                      PlotRenderingInfo plotState)
Draws the axis on a Java 2D graphics device (such as the screen or a printer).
Overrides:
draw in interface Axis
Parameters:
g2 - the graphics device (null not permitted).
cursor - the cursor location.
plotArea - the area within which the axes and data should be drawn (null not permitted).
dataArea - the area within which the data should be drawn (null not permitted).
edge - the location of the axis (null not permitted).
plotState - collects information about the plot (null permitted).
Returns:
The axis state (never null).

equals

public boolean equals(Object obj)
Tests the axis for equality with an arbitrary object.
Overrides:
equals in interface ValueAxis
Parameters:
obj - the object (null permitted).
Returns:
A boolean.

estimateMaximumTickLabelHeight

protected double estimateMaximumTickLabelHeight(Graphics2D g2)
Estimates the maximum tick label height.
Parameters:
g2 - the graphics device.
Returns:
The maximum height.

estimateMaximumTickLabelWidth

protected double estimateMaximumTickLabelWidth(Graphics2D g2,
                                               TickUnit unit)
Estimates the maximum width of the tick labels, assuming the specified tick unit is used.

Rather than computing the string bounds of every tick on the axis, we just look at two values: the lower bound and the upper bound for the axis. These two values will usually be representative.

Parameters:
g2 - the graphics device.
unit - the tick unit to use for calculation.
Returns:
The estimated maximum width of the tick labels.

getAutoRangeIncludesZero

public boolean getAutoRangeIncludesZero()
Returns the flag that indicates whether or not the automatic axis range (if indeed it is determined automatically) is forced to include zero.
Returns:
The flag.

getAutoRangeStickyZero

public boolean getAutoRangeStickyZero()
Returns a flag that affects the auto-range when zero falls outside the data range but inside the margins defined for the axis.
Returns:
The flag.

getMarkerBand

public MarkerAxisBand getMarkerBand()
Returns the (optional) marker band for the axis.
Returns:
The marker band (possibly null).

getNumberFormatOverride

public NumberFormat getNumberFormatOverride()
Returns the number format override. If this is non-null, then it will be used to format the numbers on the axis.
Returns:
The number formatter (possibly null).

getRangeType

public RangeType getRangeType()
Returns the axis range type.
Returns:
The axis range type (never null).

getTickUnit

public NumberTickUnit getTickUnit()
Returns the tick unit for the axis.

Note: if the autoTickUnitSelection flag is true the tick unit may be changed while the axis is being drawn, so in that case the return value from this method may be irrelevant if the method is called before the axis has been drawn.

Returns:
The tick unit for the axis.

hashCode

public int hashCode()
Returns a hash code for this object.
Returns:
A hash code.

java2DToValue

public double java2DToValue(double java2DValue,
                            Rectangle2D area,
                            RectangleEdge edge)
Converts a coordinate in Java2D space to the corresponding data value, assuming that the axis runs along one edge of the specified dataArea.
Overrides:
java2DToValue in interface ValueAxis
Parameters:
java2DValue - the coordinate in Java2D space.
area - the area in which the data is plotted.
edge - the location.
Returns:
The data value.

refreshTicks

public List refreshTicks(Graphics2D g2,
                         AxisState state,
                         Rectangle2D dataArea,
                         RectangleEdge edge)
Calculates the positions of the tick labels for the axis, storing the results in the tick label list (ready for drawing).
Overrides:
refreshTicks in interface Axis
Parameters:
g2 - the graphics device.
state - the axis state.
dataArea - the area in which the plot should be drawn.
edge - the location of the axis.
Returns:
A list of ticks.

refreshTicksHorizontal

protected List refreshTicksHorizontal(Graphics2D g2,
                                      Rectangle2D dataArea,
                                      RectangleEdge edge)
Calculates the positions of the tick labels for the axis, storing the results in the tick label list (ready for drawing).
Parameters:
g2 - the graphics device.
dataArea - the area in which the data should be drawn.
edge - the location of the axis.
Returns:
A list of ticks.

refreshTicksVertical

protected List refreshTicksVertical(Graphics2D g2,
                                    Rectangle2D dataArea,
                                    RectangleEdge edge)
Calculates the positions of the tick labels for the axis, storing the results in the tick label list (ready for drawing).
Parameters:
g2 - the graphics device.
dataArea - the area in which the plot should be drawn.
edge - the location of the axis.
Returns:
A list of ticks.

selectAutoTickUnit

protected void selectAutoTickUnit(Graphics2D g2,
                                  Rectangle2D dataArea,
                                  RectangleEdge edge)
Selects an appropriate tick value for the axis. The strategy is to display as many ticks as possible (selected from an array of 'standard' tick units) without the labels overlapping.
Parameters:
g2 - the graphics device.
dataArea - the area defined by the axes.
edge - the axis location.

selectHorizontalAutoTickUnit

protected void selectHorizontalAutoTickUnit(Graphics2D g2,
                                            Rectangle2D dataArea,
                                            RectangleEdge edge)
Selects an appropriate tick value for the axis. The strategy is to display as many ticks as possible (selected from an array of 'standard' tick units) without the labels overlapping.
Parameters:
g2 - the graphics device.
dataArea - the area defined by the axes.
edge - the axis location.

selectVerticalAutoTickUnit

protected void selectVerticalAutoTickUnit(Graphics2D g2,
                                          Rectangle2D dataArea,
                                          RectangleEdge edge)
Selects an appropriate tick value for the axis. The strategy is to display as many ticks as possible (selected from an array of 'standard' tick units) without the labels overlapping.
Parameters:
g2 - the graphics device.
dataArea - the area in which the plot should be drawn.
edge - the axis location.

setAutoRangeIncludesZero

public void setAutoRangeIncludesZero(boolean flag)
Sets the flag that indicates whether or not the axis range, if automatically calculated, is forced to include zero.

If the flag is changed to true, the axis range is recalculated.

Any change to the flag will trigger an AxisChangeEvent.

Parameters:
flag - the new value of the flag.

setAutoRangeStickyZero

public void setAutoRangeStickyZero(boolean flag)
Sets a flag that affects the auto-range when zero falls outside the data range but inside the margins defined for the axis.
Parameters:
flag - the new flag.

setMarkerBand

public void setMarkerBand(MarkerAxisBand band)
Sets the marker band for the axis.

The marker band is optional, leave it set to null if you don't require it.

Parameters:
band - the new band (null permitted).

setNumberFormatOverride

public void setNumberFormatOverride(NumberFormat formatter)
Sets the number format override. If this is non-null, then it will be used to format the numbers on the axis.
Parameters:
formatter - the number formatter (null permitted).

setRangeType

public void setRangeType(RangeType rangeType)
Sets the axis range type.
Parameters:
rangeType - the range type (null not permitted).

setTickUnit

public void setTickUnit(NumberTickUnit unit)
Sets the tick unit for the axis and sends an AxisChangeEvent to all registered listeners. A side effect of calling this method is that the "auto-select" feature for tick units is switched off (you can restore it using the ValueAxis.setAutoTickUnitSelection(boolean) method).
Parameters:
unit - the new tick unit (null not permitted).

setTickUnit

public void setTickUnit(NumberTickUnit unit,
                        boolean notify,
                        boolean turnOffAutoSelect)
Sets the tick unit for the axis and, if requested, sends an AxisChangeEvent to all registered listeners. In addition, an option is provided to turn off the "auto-select" feature for tick units (you can restore it using the ValueAxis.setAutoTickUnitSelection(boolean) method).
Parameters:
unit - the new tick unit (null not permitted).
notify - notify listeners?
turnOffAutoSelect - turn off the auto-tick selection?

valueToJava2D

public double valueToJava2D(double value,
                            Rectangle2D area,
                            RectangleEdge edge)
Converts a data value to a coordinate in Java2D space, assuming that the axis runs along one edge of the specified dataArea.

Note that it is possible for the coordinate to fall outside the plotArea.

Overrides:
valueToJava2D in interface ValueAxis
Parameters:
value - the data value.
area - the area for plotting the data.
edge - the axis location.
Returns:
The Java2D coordinate.