XYBarRenderer getItemPaint issue

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
a344254
Posts: 21
Joined: Wed Oct 01, 2008 9:18 pm

XYBarRenderer getItemPaint issue

Post by a344254 » Mon Dec 21, 2015 9:46 pm

Hi - I've written a custom renderer that I'm using with an XYBarPlot. My dataset has 41 points as shown below

Row 0 Column 0 X-Value -1.70000000298 Y-Value 0.0
Row 0 Column 1 X-Value -1.615000002831 Y-Value 0.0
Row 0 Column 2 X-Value -1.530000002682 Y-Value 0.0
Row 0 Column 3 X-Value -1.445000002533 Y-Value 0.0
Row 0 Column 4 X-Value -1.360000002384 Y-Value 0.0
Row 0 Column 5 X-Value -1.275000002235 Y-Value 0.0
Row 0 Column 6 X-Value -1.190000002086 Y-Value 0.0
Row 0 Column 7 X-Value -1.105000001937 Y-Value 0.0
Row 0 Column 8 X-Value -1.020000001788 Y-Value 0.0
Row 0 Column 9 X-Value -0.935000001639 Y-Value 0.0
Row 0 Column 10 X-Value -0.85000000149 Y-Value 0.0
Row 0 Column 11 X-Value -0.765000001341 Y-Value 0.0
Row 0 Column 12 X-Value -0.680000001192 Y-Value 0.0
Row 0 Column 13 X-Value -0.595000001043 Y-Value 0.0
Row 0 Column 14 X-Value -0.510000000894 Y-Value 0.0
Row 0 Column 15 X-Value -0.425000000745 Y-Value 0.0
Row 0 Column 16 X-Value -0.340000000596 Y-Value 0.0
Row 0 Column 17 X-Value -0.255000000447 Y-Value 0.0
Row 0 Column 18 X-Value -0.170000000298 Y-Value 0.0
Row 0 Column 19 X-Value -0.085000000149 Y-Value 336.0
Row 0 Column 20 X-Value 0.0 Y-Value 33.0
Row 0 Column 21 X-Value 0.085000000149 Y-Value 2.0
Row 0 Column 22 X-Value 0.170000000298 Y-Value 2.0
Row 0 Column 23 X-Value 0.255000000447 Y-Value 1.0
Row 0 Column 24 X-Value 0.340000000596 Y-Value 0.0
Row 0 Column 25 X-Value 0.425000000745 Y-Value 0.0
Row 0 Column 26 X-Value 0.510000000894 Y-Value 0.0
Row 0 Column 27 X-Value 0.595000001043 Y-Value 0.0
Row 0 Column 28 X-Value 0.680000001192 Y-Value 0.0
Row 0 Column 29 X-Value 0.765000001341 Y-Value 0.0
Row 0 Column 30 X-Value 0.85000000149 Y-Value 0.0
Row 0 Column 31 X-Value 0.935000001639 Y-Value 0.0
Row 0 Column 32 X-Value 1.020000001788 Y-Value 0.0
Row 0 Column 33 X-Value 1.105000001937 Y-Value 0.0
Row 0 Column 34 X-Value 1.190000002086 Y-Value 0.0
Row 0 Column 35 X-Value 1.275000002235 Y-Value 0.0
Row 0 Column 36 X-Value 1.360000002384 Y-Value 0.0
Row 0 Column 37 X-Value 1.445000002533 Y-Value 0.0
Row 0 Column 38 X-Value 1.530000002682 Y-Value 0.0
Row 0 Column 39 X-Value 1.615000002831 Y-Value 0.0
Row 0 Column 40 X-Value 1.70000000298 Y-Value 0.0

When I have the chart set to auto-scale the X-axis, I see getItemPaint being called for the following items, which I would expect and makes sense to me
Row 0 Column 19 X-Value -0.085000000149 Y-Value 336.0
Row 0 Column 20 X-Value 0.0 Y-Value 33.0
Row 0 Column 21 X-Value 0.085000000149 Y-Value 2.0
Row 0 Column 22 X-Value 0.170000000298 Y-Value 2.0
Row 0 Column 23 X-Value 0.255000000447 Y-Value 1.0

However when I manually set the scale on the X-axis to say -1 to +1 I see getItemPaint being called for the following items
Row 0 Column 12 X-Value -0.680000001192 Y-Value 0.0
Row 0 Column 13 X-Value -0.595000001043 Y-Value 0.0
Row 0 Column 14 X-Value -0.510000000894 Y-Value 0.0
Row 0 Column 15 X-Value -0.425000000745 Y-Value 0.0
Row 0 Column 16 X-Value -0.340000000596 Y-Value 0.0

If I choose -0.14 to +0.14 I see getItemPaint being called for
Row 0 Column 2 X-Value -1.530000002682 Y-Value 0.0
Row 0 Column 3 X-Value -1.445000002533 Y-Value 0.0
Row 0 Column 4 X-Value -1.360000002384 Y-Value 0.0

And finally -0.05 to +0.05 I see getItemPaint being called for
Row 0 Column 2 X-Value -1.530000002682 Y-Value 0.0

It makes sense to me that the number of times I see getItemPaint being called reducing because there are less bars showing on the chart, but why are the column values not reflective of the correct value in the dataset? i.e. When I have reduced the range down to -0.05 to +0.05 the only bar on the chart should be the Y value of 33, which I would expect the column value passed to getItemPaint to be 20, not 2?

What am I missing or not understanding?

Here's the code I'm using for my custom renderer

Code: Select all

import java.awt.Color;
import java.awt.Paint;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.data.xy.XYDataset;

import java.awt.Color;
import java.awt.Paint;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.data.xy.XYDataset;

/**
 *
 * @author a344254
 */
public class ExtendedBarRenderer extends XYBarRenderer {
    
    double UCL, LCL, USL, LSL;
    /**
     * Creates a new renderer.
     */
    public ExtendedBarRenderer(double USL, double LSL, double UCL, double LCL) {
        super();
        this.UCL = UCL;
        this.LCL = LCL;
        this.USL = USL;
        this.LSL = LSL;
    }
    
    public Paint getItemPaint(int row, int column) {
        XYDataset dataDataset = getPlot().getDataset(0);
        
        if (dataDataset.getX(row, column).doubleValue() >= this.USL || dataDataset.getX(row, column).doubleValue() <= this.LSL){
            return (Color.red);
        }
        else if (dataDataset.getX(row, column).doubleValue() >= this.UCL || dataDataset.getX(row, column).doubleValue() <= this.LCL){
            return (Color.yellow);
        }
        else{
            return (Color.green);
        }
    }
    
}

Thanks

John Matthews
Posts: 513
Joined: Wed Sep 12, 2007 3:18 pm

Re: XYBarRenderer getItemPaint issue

Post by John Matthews » Sat Dec 26, 2015 11:20 am

Cross-posted here.

Locked