Class PolarPlot

    • Field Detail

      • serialVersionUID

        private static final long serialVersionUID
        For serialization.
        See Also:
        Constant Field Values
      • DEFAULT_MARGIN

        private static final int DEFAULT_MARGIN
        The default margin.
        See Also:
        Constant Field Values
      • ANNOTATION_MARGIN

        private static final double ANNOTATION_MARGIN
        The annotation margin.
        See Also:
        Constant Field Values
      • DEFAULT_ANGLE_TICK_UNIT_SIZE

        public static final double DEFAULT_ANGLE_TICK_UNIT_SIZE
        The default angle tick unit size.
        See Also:
        Constant Field Values
      • DEFAULT_ANGLE_OFFSET

        public static final double DEFAULT_ANGLE_OFFSET
        The default angle offset.
        See Also:
        Constant Field Values
      • DEFAULT_GRIDLINE_STROKE

        public static final java.awt.Stroke DEFAULT_GRIDLINE_STROKE
        The default grid line stroke.
      • DEFAULT_GRIDLINE_PAINT

        public static final java.awt.Paint DEFAULT_GRIDLINE_PAINT
        The default grid line paint.
      • localizationResources

        protected static java.util.ResourceBundle localizationResources
        The resourceBundle for the localization.
      • angleTicks

        private java.util.List angleTicks
        The angles that are marked with gridlines.
      • axes

        private ObjectList axes
        The range axis (used for the y-values).
      • axisLocations

        private ObjectList axisLocations
        The axis locations.
      • datasets

        private ObjectList datasets
        Storage for the datasets.
      • renderers

        private ObjectList renderers
        Storage for the renderers.
      • angleTickUnit

        private TickUnit angleTickUnit
        The tick unit that controls the spacing between the angular grid lines.
      • angleOffset

        private double angleOffset
        An offset for the angles, to start with 0 degrees at north, east, south or west.
      • counterClockwise

        private boolean counterClockwise
        A flag indicating if the angles increase counterclockwise or clockwise.
      • angleLabelsVisible

        private boolean angleLabelsVisible
        A flag that controls whether or not the angle labels are visible.
      • angleLabelFont

        private java.awt.Font angleLabelFont
        The font used to display the angle labels - never null.
      • angleLabelPaint

        private transient java.awt.Paint angleLabelPaint
        The paint used to display the angle labels.
      • angleGridlinesVisible

        private boolean angleGridlinesVisible
        A flag that controls whether the angular grid-lines are visible.
      • angleGridlineStroke

        private transient java.awt.Stroke angleGridlineStroke
        The stroke used to draw the angular grid-lines.
      • angleGridlinePaint

        private transient java.awt.Paint angleGridlinePaint
        The paint used to draw the angular grid-lines.
      • radiusGridlinesVisible

        private boolean radiusGridlinesVisible
        A flag that controls whether the radius grid-lines are visible.
      • radiusGridlineStroke

        private transient java.awt.Stroke radiusGridlineStroke
        The stroke used to draw the radius grid-lines.
      • radiusGridlinePaint

        private transient java.awt.Paint radiusGridlinePaint
        The paint used to draw the radius grid-lines.
      • radiusMinorGridlinesVisible

        private boolean radiusMinorGridlinesVisible
        A flag that controls whether the radial minor grid-lines are visible.
      • cornerTextItems

        private java.util.List cornerTextItems
        The annotations for the plot.
      • margin

        private int margin
        The actual margin in pixels.
      • fixedLegendItems

        private LegendItemCollection fixedLegendItems
        An optional collection of legend items that can be returned by the getLegendItems() method.
      • datasetToAxesMap

        private java.util.Map datasetToAxesMap
        Storage for the mapping between datasets/renderers and range axes. The keys in the map are Integer objects, corresponding to the dataset index. The values in the map are List objects containing Integer objects (corresponding to the axis indices). If the map contains no entry for a dataset, it is assumed to map to the primary domain axis (index = 0).
    • Constructor Detail

      • PolarPlot

        public PolarPlot()
        Default constructor.
      • PolarPlot

        public PolarPlot​(XYDataset dataset,
                         ValueAxis radiusAxis,
                         PolarItemRenderer renderer)
        Creates a new plot.
        Parameters:
        dataset - the dataset (null permitted).
        radiusAxis - the radius axis (null permitted).
        renderer - the renderer (null permitted).
    • Method Detail

      • getPlotType

        public java.lang.String getPlotType()
        Returns the plot type as a string.
        Specified by:
        getPlotType in class Plot
        Returns:
        A short string describing the type of plot.
      • getAxis

        public ValueAxis getAxis()
        Returns the primary axis for the plot.
        Returns:
        The primary axis (possibly null).
        See Also:
        setAxis(ValueAxis)
      • getAxis

        public ValueAxis getAxis​(int index)
        Returns an axis for the plot.
        Parameters:
        index - the axis index.
        Returns:
        The axis (null possible).
        See Also:
        setAxis(int, ValueAxis)
      • setAxis

        public void setAxis​(ValueAxis axis)
        Sets the primary axis for the plot and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        axis - the new primary axis (null permitted).
      • setAxis

        public void setAxis​(int index,
                            ValueAxis axis)
        Sets an axis for the plot and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        index - the axis index.
        axis - the axis (null permitted).
        See Also:
        getAxis(int)
      • setAxis

        public void setAxis​(int index,
                            ValueAxis axis,
                            boolean notify)
        Sets an axis for the plot and, if requested, sends a PlotChangeEvent to all registered listeners.
        Parameters:
        index - the axis index.
        axis - the axis (null permitted).
        notify - notify listeners?
        See Also:
        getAxis(int)
      • setAxisLocation

        public void setAxisLocation​(PolarAxisLocation location)
        Sets the location of the primary axis and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        location - the location (null not permitted).
        See Also:
        getAxisLocation()
      • setAxisLocation

        public void setAxisLocation​(PolarAxisLocation location,
                                    boolean notify)
        Sets the location of the primary axis and, if requested, sends a PlotChangeEvent to all registered listeners.
        Parameters:
        location - the location (null not permitted).
        notify - notify listeners?
        See Also:
        getAxisLocation()
      • setAxisLocation

        public void setAxisLocation​(int index,
                                    PolarAxisLocation location)
        Sets the location for an axis and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        index - the axis index.
        location - the location (null not permitted).
        See Also:
        getAxisLocation(int)
      • setAxisLocation

        public void setAxisLocation​(int index,
                                    PolarAxisLocation location,
                                    boolean notify)
        Sets the axis location for an axis and, if requested, sends a PlotChangeEvent to all registered listeners.
        Parameters:
        index - the axis index.
        location - the location (null not permitted).
        notify - notify listeners?
      • getAxisCount

        public int getAxisCount()
        Returns the number of domain axes.
        Returns:
        The axis count.
      • getDataset

        public XYDataset getDataset()
        Returns the primary dataset for the plot.
        Returns:
        The primary dataset (possibly null).
        See Also:
        setDataset(XYDataset)
      • getDataset

        public XYDataset getDataset​(int index)
        Returns the dataset with the specified index, if any.
        Parameters:
        index - the dataset index.
        Returns:
        The dataset (possibly null).
        See Also:
        setDataset(int, XYDataset)
      • setDataset

        public void setDataset​(XYDataset dataset)
        Sets the primary dataset for the plot, replacing the existing dataset if there is one, and sends a link PlotChangeEvent to all registered listeners.
        Parameters:
        dataset - the dataset (null permitted).
        See Also:
        getDataset()
      • setDataset

        public void setDataset​(int index,
                               XYDataset dataset)
        Sets a dataset for the plot, replacing the existing dataset at the same index if there is one, and sends a link PlotChangeEvent to all registered listeners.
        Parameters:
        index - the dataset index.
        dataset - the dataset (null permitted).
        See Also:
        getDataset(int)
      • getDatasetCount

        public int getDatasetCount()
        Returns the number of datasets.
        Returns:
        The number of datasets.
      • indexOf

        public int indexOf​(XYDataset dataset)
        Returns the index of the specified dataset, or -1 if the dataset does not belong to the plot.
        Parameters:
        dataset - the dataset (null not permitted).
        Returns:
        The index.
      • setRenderer

        public void setRenderer​(PolarItemRenderer renderer)
        Sets the primary renderer, and notifies all listeners of a change to the plot. If the renderer is set to null, no data items will be drawn for the corresponding dataset.
        Parameters:
        renderer - the new renderer (null permitted).
        See Also:
        getRenderer()
      • setRenderer

        public void setRenderer​(int index,
                                PolarItemRenderer renderer,
                                boolean notify)
        Sets a renderer and, if requested, sends a PlotChangeEvent to all registered listeners.
        Parameters:
        index - the index.
        renderer - the renderer.
        notify - notify listeners?
        See Also:
        getRenderer(int)
      • getAngleTickUnit

        public TickUnit getAngleTickUnit()
        Returns the tick unit that controls the spacing of the angular grid lines.
        Returns:
        The tick unit (never null).
      • setAngleTickUnit

        public void setAngleTickUnit​(TickUnit unit)
        Sets the tick unit that controls the spacing of the angular grid lines, and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        unit - the tick unit (null not permitted).
      • getAngleOffset

        public double getAngleOffset()
        Returns the offset that is used for all angles.
        Returns:
        The offset for the angles.
      • setAngleOffset

        public void setAngleOffset​(double offset)
        Sets the offset that is used for all angles and sends a PlotChangeEvent to all registered listeners. This is useful to let 0 degrees be at the north, east, south or west side of the chart.
        Parameters:
        offset - The offset
      • isCounterClockwise

        public boolean isCounterClockwise()
        Get the direction for growing angle degrees.
        Returns:
        true if angle increases counterclockwise, false otherwise.
      • setCounterClockwise

        public void setCounterClockwise​(boolean counterClockwise)
        Sets the flag for increasing angle degrees direction. true for counterclockwise, false for clockwise.
        Parameters:
        counterClockwise - The flag.
      • isAngleLabelsVisible

        public boolean isAngleLabelsVisible()
        Returns a flag that controls whether or not the angle labels are visible.
        Returns:
        A boolean.
        See Also:
        setAngleLabelsVisible(boolean)
      • setAngleLabelsVisible

        public void setAngleLabelsVisible​(boolean visible)
        Sets the flag that controls whether or not the angle labels are visible, and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        visible - the flag.
        See Also:
        isAngleLabelsVisible()
      • getAngleLabelFont

        public java.awt.Font getAngleLabelFont()
        Returns the font used to display the angle labels.
        Returns:
        A font (never null).
        See Also:
        setAngleLabelFont(Font)
      • setAngleLabelFont

        public void setAngleLabelFont​(java.awt.Font font)
        Sets the font used to display the angle labels and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        font - the font (null not permitted).
        See Also:
        getAngleLabelFont()
      • getAngleLabelPaint

        public java.awt.Paint getAngleLabelPaint()
        Returns the paint used to display the angle labels.
        Returns:
        A paint (never null).
        See Also:
        setAngleLabelPaint(Paint)
      • setAngleLabelPaint

        public void setAngleLabelPaint​(java.awt.Paint paint)
        Sets the paint used to display the angle labels and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        paint - the paint (null not permitted).
      • isAngleGridlinesVisible

        public boolean isAngleGridlinesVisible()
        Returns true if the angular gridlines are visible, and false otherwise.
        Returns:
        true or false.
        See Also:
        setAngleGridlinesVisible(boolean)
      • setAngleGridlinesVisible

        public void setAngleGridlinesVisible​(boolean visible)
        Sets the flag that controls whether or not the angular grid-lines are visible.

        If the flag value is changed, a PlotChangeEvent is sent to all registered listeners.

        Parameters:
        visible - the new value of the flag.
        See Also:
        isAngleGridlinesVisible()
      • getAngleGridlineStroke

        public java.awt.Stroke getAngleGridlineStroke()
        Returns the stroke for the grid-lines (if any) plotted against the angular axis.
        Returns:
        The stroke (possibly null).
        See Also:
        setAngleGridlineStroke(Stroke)
      • setAngleGridlineStroke

        public void setAngleGridlineStroke​(java.awt.Stroke stroke)
        Sets the stroke for the grid lines plotted against the angular axis and sends a PlotChangeEvent to all registered listeners.

        If you set this to null, no grid lines will be drawn.

        Parameters:
        stroke - the stroke (null permitted).
        See Also:
        getAngleGridlineStroke()
      • getAngleGridlinePaint

        public java.awt.Paint getAngleGridlinePaint()
        Returns the paint for the grid lines (if any) plotted against the angular axis.
        Returns:
        The paint (possibly null).
        See Also:
        setAngleGridlinePaint(Paint)
      • setAngleGridlinePaint

        public void setAngleGridlinePaint​(java.awt.Paint paint)
        Sets the paint for the grid lines plotted against the angular axis.

        If you set this to null, no grid lines will be drawn.

        Parameters:
        paint - the paint (null permitted).
        See Also:
        getAngleGridlinePaint()
      • isRadiusGridlinesVisible

        public boolean isRadiusGridlinesVisible()
        Returns true if the radius axis grid is visible, and false otherwise.
        Returns:
        true or false.
        See Also:
        setRadiusGridlinesVisible(boolean)
      • setRadiusGridlinesVisible

        public void setRadiusGridlinesVisible​(boolean visible)
        Sets the flag that controls whether or not the radius axis grid lines are visible.

        If the flag value is changed, a PlotChangeEvent is sent to all registered listeners.

        Parameters:
        visible - the new value of the flag.
        See Also:
        isRadiusGridlinesVisible()
      • getRadiusGridlineStroke

        public java.awt.Stroke getRadiusGridlineStroke()
        Returns the stroke for the grid lines (if any) plotted against the radius axis.
        Returns:
        The stroke (possibly null).
        See Also:
        setRadiusGridlineStroke(Stroke)
      • setRadiusGridlineStroke

        public void setRadiusGridlineStroke​(java.awt.Stroke stroke)
        Sets the stroke for the grid lines plotted against the radius axis and sends a PlotChangeEvent to all registered listeners.

        If you set this to null, no grid lines will be drawn.

        Parameters:
        stroke - the stroke (null permitted).
        See Also:
        getRadiusGridlineStroke()
      • getRadiusGridlinePaint

        public java.awt.Paint getRadiusGridlinePaint()
        Returns the paint for the grid lines (if any) plotted against the radius axis.
        Returns:
        The paint (possibly null).
        See Also:
        setRadiusGridlinePaint(Paint)
      • setRadiusGridlinePaint

        public void setRadiusGridlinePaint​(java.awt.Paint paint)
        Sets the paint for the grid lines plotted against the radius axis and sends a PlotChangeEvent to all registered listeners.

        If you set this to null, no grid lines will be drawn.

        Parameters:
        paint - the paint (null permitted).
        See Also:
        getRadiusGridlinePaint()
      • isRadiusMinorGridlinesVisible

        public boolean isRadiusMinorGridlinesVisible()
        Return the current value of the flag indicating if radial minor grid-lines will be drawn or not.
        Returns:
        Returns true if radial minor grid-lines are drawn.
      • setRadiusMinorGridlinesVisible

        public void setRadiusMinorGridlinesVisible​(boolean flag)
        Set the flag that determines if radial minor grid-lines will be drawn, and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        flag - true to draw the radial minor grid-lines, false to hide them.
      • getMargin

        public int getMargin()
        Returns the margin around the plot area.
        Returns:
        The actual margin in pixels.
      • setMargin

        public void setMargin​(int margin)
        Set the margin around the plot area and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        margin - The new margin in pixels.
      • setFixedLegendItems

        public void setFixedLegendItems​(LegendItemCollection items)
        Sets the fixed legend items for the plot. Leave this set to null if you prefer the legend items to be created automatically.
        Parameters:
        items - the legend items (null permitted).
        See Also:
        getFixedLegendItems()
      • addCornerTextItem

        public void addCornerTextItem​(java.lang.String text)
        Add text to be displayed in the lower right hand corner and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        text - the text to display (null not permitted).
        See Also:
        removeCornerTextItem(String)
      • removeCornerTextItem

        public void removeCornerTextItem​(java.lang.String text)
        Remove the given text from the list of corner text items and sends a PlotChangeEvent to all registered listeners.
        Parameters:
        text - the text to remove (null ignored).
        See Also:
        addCornerTextItem(String)
      • refreshAngleTicks

        protected java.util.List refreshAngleTicks()
        Generates a list of tick values for the angular tick marks.
        Returns:
        A list of NumberTick instances.
      • calculateTextAnchor

        protected TextAnchor calculateTextAnchor​(double angleDegrees)
        Calculate the text position for the given degrees.
        Parameters:
        angleDegrees - the angle in degrees.
        Returns:
        The optimal text anchor.
      • mapDatasetToAxis

        public void mapDatasetToAxis​(int index,
                                     int axisIndex)
        Maps a dataset to a particular axis. All data will be plotted against axis zero by default, no mapping is required for this case.
        Parameters:
        index - the dataset index (zero-based).
        axisIndex - the axis index.
      • mapDatasetToAxes

        public void mapDatasetToAxes​(int index,
                                     java.util.List axisIndices)
        Maps the specified dataset to the axes in the list. Note that the conversion of data values into Java2D space is always performed using the first axis in the list.
        Parameters:
        index - the dataset index (zero-based).
        axisIndices - the axis indices (null permitted).
      • checkAxisIndices

        private void checkAxisIndices​(java.util.List indices)
        This method is used to perform argument checking on the list of axis indices passed to mapDatasetToAxes().
        Parameters:
        indices - the list of indices (null permitted).
      • getAxisForDataset

        public ValueAxis getAxisForDataset​(int index)
        Returns the axis for a dataset.
        Parameters:
        index - the dataset index.
        Returns:
        The axis.
      • getAxisIndex

        public int getAxisIndex​(ValueAxis axis)
        Returns the index of the given axis.
        Parameters:
        axis - the axis.
        Returns:
        The axis index or -1 if axis is not used in this plot.
      • getIndexOf

        public int getIndexOf​(PolarItemRenderer renderer)
        Returns the index of the specified renderer, or -1 if the renderer is not assigned to this plot.
        Parameters:
        renderer - the renderer (null permitted).
        Returns:
        The renderer index.
      • draw

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

        This plot relies on a PolarItemRenderer to draw each item in the plot. This allows the visual representation of the data to be changed easily.

        The optional info argument collects information about the rendering of the plot (dimensions, tooltip information etc). Just pass in null if you do not need this information.

        Specified by:
        draw in class Plot
        Parameters:
        g2 - the graphics device.
        area - the area within which the plot (including axes and labels) should be drawn.
        anchor - the anchor point (null permitted).
        parentState - ignored.
        info - collects chart drawing information (null permitted).
      • drawCornerTextItems

        protected void drawCornerTextItems​(java.awt.Graphics2D g2,
                                           java.awt.geom.Rectangle2D area)
        Draws the corner text items.
        Parameters:
        g2 - the drawing surface.
        area - the area.
      • drawAxis

        protected AxisState drawAxis​(ValueAxis axis,
                                     PolarAxisLocation location,
                                     java.awt.Graphics2D g2,
                                     java.awt.geom.Rectangle2D plotArea)
        Draws the axis with the specified index.
        Parameters:
        axis - the axis.
        location - the axis location.
        g2 - the graphics target.
        plotArea - the plot area.
        Returns:
        The axis state.
      • render

        protected void render​(java.awt.Graphics2D g2,
                              java.awt.geom.Rectangle2D dataArea,
                              PlotRenderingInfo info)
        Draws a representation of the data within the dataArea region, using the current m_Renderer.
        Parameters:
        g2 - the graphics device.
        dataArea - the region in which the data is to be drawn.
        info - an optional object for collection dimension information (null permitted).
      • drawGridlines

        protected void drawGridlines​(java.awt.Graphics2D g2,
                                     java.awt.geom.Rectangle2D dataArea,
                                     java.util.List angularTicks,
                                     java.util.List radialTicks)
        Draws the gridlines for the plot, if they are visible.
        Parameters:
        g2 - the graphics device.
        dataArea - the data area.
        angularTicks - the ticks for the angular axis.
        radialTicks - the ticks for the radial axis.
      • buildRadialTicks

        protected java.util.List buildRadialTicks​(java.util.List allTicks)
        Create a list of ticks based on the given list and plot properties. Only ticks of a specific type may be in the result list.
        Parameters:
        allTicks - A list of all available ticks for the primary axis. null not permitted.
        Returns:
        Ticks to use for radial gridlines.
      • zoom

        public void zoom​(double percent)
        Zooms the axis ranges by the specified percentage about the anchor point.
        Overrides:
        zoom in class Plot
        Parameters:
        percent - the amount of the zoom.
      • getDatasetsMappedToAxis

        private java.util.List getDatasetsMappedToAxis​(java.lang.Integer axisIndex)
        A utility method that returns a list of datasets that are mapped to a particular axis.
        Parameters:
        axisIndex - the axis index (null not permitted).
        Returns:
        A list of datasets.
      • getDataRange

        public Range getDataRange​(ValueAxis axis)
        Returns the range for the specified axis.
        Specified by:
        getDataRange in interface ValueAxisPlot
        Parameters:
        axis - the axis.
        Returns:
        The range.
      • rendererChanged

        public void rendererChanged​(RendererChangeEvent event)
        Notifies all registered listeners of a property change.

        One source of property change events is the plot's m_Renderer.

        Specified by:
        rendererChanged in interface RendererChangeListener
        Parameters:
        event - information about the property change.
      • getLegendItems

        public LegendItemCollection getLegendItems()
        Returns the legend items for the plot. Each legend item is generated by the plot's m_Renderer, since the m_Renderer is responsible for the visual representation of the data.
        Specified by:
        getLegendItems in interface LegendItemSource
        Overrides:
        getLegendItems in class Plot
        Returns:
        The legend items.
      • equals

        public boolean equals​(java.lang.Object obj)
        Tests this plot for equality with another object.
        Overrides:
        equals in class Plot
        Parameters:
        obj - the object (null permitted).
        Returns:
        true or false.
      • clone

        public java.lang.Object clone()
                               throws java.lang.CloneNotSupportedException
        Returns a clone of the plot.
        Specified by:
        clone in interface PublicCloneable
        Overrides:
        clone in class Plot
        Returns:
        A clone.
        Throws:
        java.lang.CloneNotSupportedException - this can occur if some component of the plot cannot be cloned.
      • writeObject

        private void writeObject​(java.io.ObjectOutputStream stream)
                          throws java.io.IOException
        Provides serialization support.
        Parameters:
        stream - the output stream.
        Throws:
        java.io.IOException - if there is an I/O error.
      • readObject

        private void readObject​(java.io.ObjectInputStream stream)
                         throws java.io.IOException,
                                java.lang.ClassNotFoundException
        Provides serialization support.
        Parameters:
        stream - the input stream.
        Throws:
        java.io.IOException - if there is an I/O error.
        java.lang.ClassNotFoundException - if there is a classpath problem.
      • translateToJava2D

        public java.awt.Point translateToJava2D​(double angleDegrees,
                                                double radius,
                                                ValueAxis axis,
                                                java.awt.geom.Rectangle2D dataArea)
        Translates a (theta, radius) pair into Java2D coordinates. If radius is less than the lower bound of the axis, then this method returns the centre point.
        Parameters:
        angleDegrees - the angle in degrees.
        radius - the radius.
        axis - the axis.
        dataArea - the data area.
        Returns:
        A point in Java2D space.