Package org.jfree.chart.renderer.xy
Class DensityPlotXYItemRenderer
- java.lang.Object
-
- org.jfree.chart.renderer.AbstractRenderer
-
- org.jfree.chart.renderer.xy.AbstractXYItemRenderer
-
- org.jfree.chart.renderer.xy.XYLineAndShapeRenderer
-
- org.jfree.chart.renderer.xy.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.
-
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.
-
Constructor Summary
Constructors Constructor Description DensityPlotXYItemRenderer(int xBins, int yBins, Color[] colors, DensityPlotXYItemRenderer.DensityMode mode, double bandwidth)
Constructs a new density plot renderer.
-
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 class java.lang.Object
finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
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_DensityMode
protected DensityPlotXYItemRenderer.DensityMode m_DensityMode
the mode for the plot.
-
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 usemode
- 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 usemax
- 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 interfaceorg.jfree.chart.renderer.xy.XYItemRenderer
- Overrides:
getItemPaint
in classorg.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 interfaceorg.jfree.chart.renderer.xy.XYItemRenderer
- Overrides:
drawItem
in classorg.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
-
getDensityMode
public DensityPlotXYItemRenderer.DensityMode getDensityMode()
Returns the current density calculation mode (BINNING or KDE).- Returns:
- The density mode.
-
setDensityMode
public void setDensityMode(DensityPlotXYItemRenderer.DensityMode densityMode)
Sets the density calculation mode.- Parameters:
densityMode
- The new density mode.
-
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.
-
-