Class DensityPlotXYItemRenderer

  • All Implemented Interfaces:
    Serializable, Cloneable, EventListener, org.jfree.chart.event.AnnotationChangeListener, org.jfree.chart.LegendItemSource, org.jfree.chart.renderer.xy.XYItemRenderer, org.jfree.chart.util.PublicCloneable

    public class DensityPlotXYItemRenderer
    extends org.jfree.chart.renderer.xy.XYLineAndShapeRenderer
    A custom XYItemRenderer that colors the individual data points (shapes) based on the calculated data density (either Binning or KDE). It extends XYLineAndShapeRenderer and overrides getItemPaint to inject the density-derived color for each point.
    See Also:
    Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  DensityPlotXYItemRenderer.DensityMode
      Defines the calculation method for the density map.
      • Nested classes/interfaces inherited from class org.jfree.chart.renderer.xy.XYLineAndShapeRenderer

        org.jfree.chart.renderer.xy.XYLineAndShapeRenderer.State
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected double m_Bandwidth
      Standard deviation (sigma) for the Gaussian kernel.
      protected Color[] m_Colors
      the colors to use for the paintscale.
      protected org.jfree.data.xy.XYDataset m_CurrentDataset
      the current dataset.
      protected boolean m_DensityCalculated
      whether the density was calculated.
      protected double[][] m_DensityMap
      the density map.
      protected DensityPlotXYItemRenderer.DensityMode m_DensityMode
      the mode for the plot.
      protected double m_MaxDensity
      the maximum density calculated.
      protected double m_MinDensity
      the minimum density calculated.
      protected org.jfree.chart.renderer.PaintScale m_PaintScale
      the paintscale in use.
      protected int m_XBins
      the number of bins on the X axis.
      protected double m_XMaxData
      the maximum in the data (X axis).
      protected double m_XMinData
      the minimum in the data (X axis).
      protected double m_XRange
      the range for the X axis.
      protected int m_YBins
      the number of bins on the Y axis.
      protected double m_YMaxData
      the maximum in the data (Y axis).
      protected double m_YMinData
      the minimum in the data (Y axis).
      protected double m_YRange
      the range for the Y axis.
      • Fields inherited from class org.jfree.chart.renderer.AbstractRenderer

        DEFAULT_ITEM_LABEL_INSETS, DEFAULT_OUTLINE_PAINT, DEFAULT_OUTLINE_STROKE, DEFAULT_PAINT, DEFAULT_SHAPE, DEFAULT_STROKE, DEFAULT_VALUE_LABEL_FONT, DEFAULT_VALUE_LABEL_PAINT, ZERO
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void calculateBinningDensity​(org.jfree.data.xy.XYDataset dataset)
      Calculates density using simple binning (counting points per cell).
      protected void calculateDensity​(org.jfree.data.xy.XYDataset dataset, org.jfree.chart.plot.XYPlot plot)
      Calculates the 2D density map from the dataset using the configured mode.
      protected void calculateKdeDensity​(org.jfree.data.xy.XYDataset dataset)
      Calculates density using 2D Gaussian Kernel Density Estimation.
      protected org.jfree.chart.renderer.PaintScale createPaintScale​(double min, double max)
      Creates the paintscale to use.
      void drawItem​(Graphics2D g2, org.jfree.chart.renderer.xy.XYItemRendererState state, Rectangle2D dataArea, org.jfree.chart.plot.PlotRenderingInfo info, org.jfree.chart.plot.XYPlot plot, org.jfree.chart.axis.ValueAxis domainAxis, org.jfree.chart.axis.ValueAxis rangeAxis, org.jfree.data.xy.XYDataset dataset, int series, int item, org.jfree.chart.plot.CrosshairState crosshairState, int pass)
      The drawItem method now only ensures the density map is calculated and then delegates to the superclass to draw the shapes using our custom getItemPaint.
      double getBandwidth()
      Returns the bandwidth (sigma) used for KDE.
      Color[] getColors()
      Returns the current colors being used.
      DensityPlotXYItemRenderer.DensityMode getDensityMode()
      Returns the current density calculation mode (BINNING or KDE).
      Paint getItemPaint​(int series, int item)
      Overrides the base method to provide the density-derived color for the shape/line.
      void invalidateDensityMap()
      Resets the calculation flag.
      void setBandwidth​(double bandwidth)
      Sets the bandwidth (sigma) for the Gaussian kernel.
      void setColors​(Color[] value)
      Sets the colors to use.
      void setDensityMode​(DensityPlotXYItemRenderer.DensityMode densityMode)
      Sets the density calculation mode.
      • Methods inherited from class org.jfree.chart.renderer.xy.XYLineAndShapeRenderer

        clone, drawFirstPassShape, drawPrimaryLine, drawPrimaryLineAsPath, drawSecondaryPass, equals, getDefaultLinesVisible, getDefaultShapesFilled, getDefaultShapesVisible, getDrawOutlines, getDrawSeriesLineAsPath, getItemLineVisible, getItemShapeFilled, getItemShapeVisible, getLegendItem, getLegendLine, getPassCount, getSeriesLinesVisible, getSeriesShapesFilled, getSeriesShapesVisible, getUseFillPaint, getUseOutlinePaint, hashCode, initialise, isItemPass, isLinePass, setDefaultLinesVisible, setDefaultShapesFilled, setDefaultShapesVisible, setDrawOutlines, setDrawSeriesLineAsPath, setLegendLine, setSeriesLinesVisible, setSeriesLinesVisible, setSeriesShapesFilled, setSeriesShapesFilled, setSeriesShapesVisible, setSeriesShapesVisible, setUseFillPaint, setUseOutlinePaint
      • Methods inherited from class org.jfree.chart.renderer.xy.AbstractXYItemRenderer

        addAnnotation, addAnnotation, addEntity, annotationChanged, beginElementGroup, calculateDomainMarkerTextAnchorPoint, drawAnnotations, drawDomainLine, drawDomainMarker, drawItemLabel, drawRangeLine, drawRangeMarker, fillDomainGridBand, fillRangeGridBand, findDomainBounds, findDomainBounds, findRangeBounds, findRangeBounds, getAnnotations, getDefaultItemLabelGenerator, getDefaultToolTipGenerator, getDrawingSupplier, getItemLabelGenerator, getLegendItemLabelGenerator, getLegendItems, getLegendItemToolTipGenerator, getLegendItemURLGenerator, getPlot, getSeriesItemLabelGenerator, getSeriesToolTipGenerator, getToolTipGenerator, getURLGenerator, lineTo, moveTo, removeAnnotation, removeAnnotations, setDefaultItemLabelGenerator, setDefaultToolTipGenerator, setLegendItemLabelGenerator, setLegendItemToolTipGenerator, setLegendItemURLGenerator, setPlot, setSeriesItemLabelGenerator, setSeriesToolTipGenerator, setURLGenerator, updateCrosshairValues
      • Methods inherited from class org.jfree.chart.renderer.AbstractRenderer

        addChangeListener, beginElementGroup, calculateLabelAnchorPoint, clearSeriesPaints, clearSeriesStrokes, endElementGroup, fireChangeEvent, getAutoPopulateSeriesFillPaint, getAutoPopulateSeriesOutlinePaint, getAutoPopulateSeriesOutlineStroke, getAutoPopulateSeriesPaint, getAutoPopulateSeriesShape, getAutoPopulateSeriesStroke, getDataBoundsIncludesVisibleSeriesOnly, getDefaultCreateEntities, getDefaultEntityRadius, getDefaultFillPaint, getDefaultItemLabelFont, getDefaultItemLabelPaint, getDefaultItemLabelsVisible, getDefaultLegendShape, getDefaultLegendTextFont, getDefaultLegendTextPaint, getDefaultNegativeItemLabelPosition, getDefaultOutlinePaint, getDefaultOutlineStroke, getDefaultPaint, getDefaultPositiveItemLabelPosition, getDefaultSeriesVisible, getDefaultSeriesVisibleInLegend, getDefaultShape, getDefaultStroke, getItemCreateEntity, getItemFillPaint, getItemLabelAnchorOffset, getItemLabelFont, getItemLabelInsets, getItemLabelPaint, getItemOutlinePaint, getItemOutlineStroke, getItemShape, getItemStroke, getItemVisible, getLegendShape, getLegendTextFont, getLegendTextPaint, getNegativeItemLabelPosition, getPositiveItemLabelPosition, getSeriesCreateEntities, getSeriesFillPaint, getSeriesItemLabelFont, getSeriesItemLabelPaint, getSeriesNegativeItemLabelPosition, getSeriesOutlinePaint, getSeriesOutlineStroke, getSeriesPaint, getSeriesPositiveItemLabelPosition, getSeriesShape, getSeriesStroke, getSeriesVisible, getSeriesVisibleInLegend, getTreatLegendShapeAsLine, hasListener, isComputeItemLabelContrastColor, isItemLabelVisible, isSeriesItemLabelsVisible, isSeriesVisible, isSeriesVisibleInLegend, lookupLegendShape, lookupLegendTextFont, lookupLegendTextPaint, lookupSeriesFillPaint, lookupSeriesOutlinePaint, lookupSeriesOutlineStroke, lookupSeriesPaint, lookupSeriesShape, lookupSeriesStroke, notifyListeners, removeChangeListener, setAutoPopulateSeriesFillPaint, setAutoPopulateSeriesOutlinePaint, setAutoPopulateSeriesOutlineStroke, setAutoPopulateSeriesPaint, setAutoPopulateSeriesShape, setAutoPopulateSeriesStroke, setComputeItemLabelContrastColor, setDataBoundsIncludesVisibleSeriesOnly, setDefaultCreateEntities, setDefaultCreateEntities, setDefaultEntityRadius, setDefaultFillPaint, setDefaultFillPaint, setDefaultItemLabelFont, setDefaultItemLabelFont, setDefaultItemLabelPaint, setDefaultItemLabelPaint, setDefaultItemLabelsVisible, setDefaultItemLabelsVisible, setDefaultLegendShape, setDefaultLegendTextFont, setDefaultLegendTextPaint, setDefaultNegativeItemLabelPosition, setDefaultNegativeItemLabelPosition, setDefaultOutlinePaint, setDefaultOutlinePaint, setDefaultOutlineStroke, setDefaultOutlineStroke, setDefaultPaint, setDefaultPaint, setDefaultPositiveItemLabelPosition, setDefaultPositiveItemLabelPosition, setDefaultSeriesVisible, setDefaultSeriesVisible, setDefaultSeriesVisibleInLegend, setDefaultSeriesVisibleInLegend, setDefaultShape, setDefaultShape, setDefaultStroke, setDefaultStroke, setItemLabelAnchorOffset, setItemLabelInsets, setLegendShape, setLegendTextFont, setLegendTextPaint, setSeriesCreateEntities, setSeriesCreateEntities, setSeriesFillPaint, setSeriesFillPaint, setSeriesItemLabelFont, setSeriesItemLabelFont, setSeriesItemLabelPaint, setSeriesItemLabelPaint, setSeriesItemLabelsVisible, setSeriesItemLabelsVisible, setSeriesItemLabelsVisible, setSeriesNegativeItemLabelPosition, setSeriesNegativeItemLabelPosition, setSeriesOutlinePaint, setSeriesOutlinePaint, setSeriesOutlineStroke, setSeriesOutlineStroke, setSeriesPaint, setSeriesPaint, setSeriesPositiveItemLabelPosition, setSeriesPositiveItemLabelPosition, setSeriesShape, setSeriesShape, setSeriesStroke, setSeriesStroke, setSeriesVisible, setSeriesVisible, setSeriesVisibleInLegend, setSeriesVisibleInLegend, setTreatLegendShapeAsLine
      • Methods inherited from interface org.jfree.chart.LegendItemSource

        getLegendItems
      • Methods inherited from interface org.jfree.chart.renderer.xy.XYItemRenderer

        addAnnotation, addAnnotation, addChangeListener, drawAnnotations, drawDomainLine, drawDomainMarker, drawRangeLine, drawRangeMarker, fillDomainGridBand, fillRangeGridBand, findDomainBounds, findRangeBounds, getDefaultCreateEntities, getDefaultFillPaint, getDefaultItemLabelFont, getDefaultItemLabelGenerator, getDefaultItemLabelPaint, getDefaultItemLabelsVisible, getDefaultNegativeItemLabelPosition, getDefaultOutlinePaint, getDefaultOutlineStroke, getDefaultPaint, getDefaultPositiveItemLabelPosition, getDefaultSeriesVisible, getDefaultSeriesVisibleInLegend, getDefaultShape, getDefaultStroke, getDefaultToolTipGenerator, getItemCreateEntity, getItemFillPaint, getItemLabelFont, getItemLabelGenerator, getItemLabelPaint, getItemOutlinePaint, getItemOutlineStroke, getItemShape, getItemStroke, getItemVisible, getLegendItemLabelGenerator, getNegativeItemLabelPosition, getPlot, getPositiveItemLabelPosition, getSeriesCreateEntities, getSeriesFillPaint, getSeriesItemLabelFont, getSeriesItemLabelGenerator, getSeriesItemLabelPaint, getSeriesNegativeItemLabelPosition, getSeriesOutlinePaint, getSeriesOutlineStroke, getSeriesPaint, getSeriesPositiveItemLabelPosition, getSeriesShape, getSeriesStroke, getSeriesToolTipGenerator, getSeriesVisible, getSeriesVisibleInLegend, getToolTipGenerator, getURLGenerator, isItemLabelVisible, isSeriesItemLabelsVisible, isSeriesVisible, isSeriesVisibleInLegend, removeAnnotation, removeAnnotations, removeChangeListener, setDefaultCreateEntities, setDefaultCreateEntities, setDefaultFillPaint, setDefaultFillPaint, setDefaultItemLabelFont, setDefaultItemLabelGenerator, setDefaultItemLabelPaint, setDefaultItemLabelsVisible, setDefaultItemLabelsVisible, setDefaultNegativeItemLabelPosition, setDefaultNegativeItemLabelPosition, setDefaultOutlinePaint, setDefaultOutlinePaint, setDefaultOutlineStroke, setDefaultOutlineStroke, setDefaultPaint, setDefaultPaint, setDefaultPositiveItemLabelPosition, setDefaultPositiveItemLabelPosition, setDefaultSeriesVisible, setDefaultSeriesVisible, setDefaultSeriesVisibleInLegend, setDefaultSeriesVisibleInLegend, setDefaultShape, setDefaultShape, setDefaultStroke, setDefaultStroke, setDefaultToolTipGenerator, setLegendItemLabelGenerator, setPlot, setSeriesCreateEntities, setSeriesCreateEntities, setSeriesFillPaint, setSeriesFillPaint, setSeriesItemLabelFont, setSeriesItemLabelGenerator, setSeriesItemLabelPaint, setSeriesItemLabelsVisible, setSeriesItemLabelsVisible, setSeriesItemLabelsVisible, setSeriesNegativeItemLabelPosition, setSeriesNegativeItemLabelPosition, setSeriesOutlinePaint, setSeriesOutlinePaint, setSeriesOutlineStroke, setSeriesOutlineStroke, setSeriesPaint, setSeriesPaint, setSeriesPositiveItemLabelPosition, setSeriesPositiveItemLabelPosition, setSeriesShape, setSeriesShape, setSeriesStroke, setSeriesStroke, setSeriesToolTipGenerator, setSeriesVisible, setSeriesVisible, setSeriesVisibleInLegend, setSeriesVisibleInLegend, setURLGenerator
    • Field Detail

      • m_XBins

        protected int m_XBins
        the number of bins on the X axis.
      • m_YBins

        protected int m_YBins
        the number of bins on the Y axis.
      • m_DensityMap

        protected double[][] m_DensityMap
        the density map.
      • m_PaintScale

        protected org.jfree.chart.renderer.PaintScale m_PaintScale
        the paintscale in use.
      • m_DensityCalculated

        protected boolean m_DensityCalculated
        whether the density was calculated.
      • m_MaxDensity

        protected double m_MaxDensity
        the maximum density calculated.
      • m_MinDensity

        protected double m_MinDensity
        the minimum density calculated.
      • m_CurrentDataset

        protected org.jfree.data.xy.XYDataset m_CurrentDataset
        the current dataset.
      • m_XMinData

        protected double m_XMinData
        the minimum in the data (X axis).
      • m_XMaxData

        protected double m_XMaxData
        the maximum in the data (X axis).
      • m_YMinData

        protected double m_YMinData
        the minimum in the data (Y axis).
      • m_YMaxData

        protected double m_YMaxData
        the maximum in the data (Y axis).
      • m_XRange

        protected double m_XRange
        the range for the X axis.
      • m_YRange

        protected double m_YRange
        the range for the Y axis.
      • m_Bandwidth

        protected double m_Bandwidth
        Standard deviation (sigma) for the Gaussian kernel.
      • m_Colors

        protected Color[] m_Colors
        the colors to use for the paintscale.
    • Constructor Detail

      • DensityPlotXYItemRenderer

        public DensityPlotXYItemRenderer​(int xBins,
                                         int yBins,
                                         Color[] colors,
                                         DensityPlotXYItemRenderer.DensityMode mode,
                                         double bandwidth)
        Constructs a new density plot renderer.
        Parameters:
        xBins - The number of bins to divide the domain (X) axis into.
        yBins - The number of bins to divide the range (Y) axis into.
        colors - The colors to use
        mode - The initial density calculation mode (BINNING or KDE).
    • Method Detail

      • createPaintScale

        protected org.jfree.chart.renderer.PaintScale createPaintScale​(double min,
                                                                       double max)
        Creates the paintscale to use.
        Parameters:
        min - the minimum to use
        max - the maximum to use
        Returns:
        the scale
      • calculateDensity

        protected void calculateDensity​(org.jfree.data.xy.XYDataset dataset,
                                        org.jfree.chart.plot.XYPlot plot)
        Calculates the 2D density map from the dataset using the configured mode. This method also stores the axis bounds for use in getItemPaint.
        Parameters:
        dataset - The dataset containing the (x, y) points.
        plot - The plot, used to get axis information.
      • calculateBinningDensity

        protected void calculateBinningDensity​(org.jfree.data.xy.XYDataset dataset)
        Calculates density using simple binning (counting points per cell).
      • calculateKdeDensity

        protected void calculateKdeDensity​(org.jfree.data.xy.XYDataset dataset)
        Calculates density using 2D Gaussian Kernel Density Estimation.
      • invalidateDensityMap

        public void invalidateDensityMap()
        Resets the calculation flag. Should be called when the dataset, axes, or mode changes.
      • getItemPaint

        public Paint getItemPaint​(int series,
                                  int item)
        Overrides the base method to provide the density-derived color for the shape/line. This method is called by the superclass during its drawItem implementation. * @param series the series index.
        Specified by:
        getItemPaint in interface org.jfree.chart.renderer.xy.XYItemRenderer
        Overrides:
        getItemPaint in class org.jfree.chart.renderer.AbstractRenderer
        Parameters:
        item - the item index.
        Returns:
        The Paint object corresponding to the item's density.
      • drawItem

        public void drawItem​(Graphics2D g2,
                             org.jfree.chart.renderer.xy.XYItemRendererState state,
                             Rectangle2D dataArea,
                             org.jfree.chart.plot.PlotRenderingInfo info,
                             org.jfree.chart.plot.XYPlot plot,
                             org.jfree.chart.axis.ValueAxis domainAxis,
                             org.jfree.chart.axis.ValueAxis rangeAxis,
                             org.jfree.data.xy.XYDataset dataset,
                             int series,
                             int item,
                             org.jfree.chart.plot.CrosshairState crosshairState,
                             int pass)
        The drawItem method now only ensures the density map is calculated and then delegates to the superclass to draw the shapes using our custom getItemPaint. (Signature preserved for compatibility)
        Specified by:
        drawItem in interface org.jfree.chart.renderer.xy.XYItemRenderer
        Overrides:
        drawItem in class org.jfree.chart.renderer.xy.XYLineAndShapeRenderer
      • getColors

        public Color[] getColors()
        Returns the current colors being used.
        Returns:
        the colors
      • setColors

        public void setColors​(Color[] value)
        Sets the colors to use.
        Parameters:
        value - the colors
      • getBandwidth

        public double getBandwidth()
        Returns the bandwidth (sigma) used for KDE. Ignored in BINNING mode.'
        Returns:
        The bandwidth.
      • setBandwidth

        public void setBandwidth​(double bandwidth)
        Sets the bandwidth (sigma) for the Gaussian kernel. Requires invalidation.
        Parameters:
        bandwidth - The new bandwidth. Must be greater than 0.