Search in sources :

Example 6 with TableXYDataset

use of org.jfree.data.xy.TableXYDataset in project SIMVA-SoS by SESoS.

the class StackedXYAreaRenderer method drawItem.

/**
 * Draws the visual representation of a single data item.
 *
 * @param g2  the graphics device.
 * @param state  the renderer state.
 * @param dataArea  the area within which the data is being drawn.
 * @param info  collects information about the drawing.
 * @param plot  the plot (can be used to obtain standard color information
 *              etc).
 * @param domainAxis  the domain axis.
 * @param rangeAxis  the range axis.
 * @param dataset  the dataset.
 * @param series  the series index (zero-based).
 * @param item  the item index (zero-based).
 * @param crosshairState  information about crosshairs on a plot.
 * @param pass  the pass index.
 *
 * @throws ClassCastException if <code>state</code> is not an instance of
 *         <code>StackedXYAreaRendererState</code> or <code>dataset</code>
 *         is not an instance of {@link TableXYDataset}.
 */
@Override
public void drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass) {
    PlotOrientation orientation = plot.getOrientation();
    StackedXYAreaRendererState areaState = (StackedXYAreaRendererState) state;
    // Get the item count for the series, so that we can know which is the
    // end of the series.
    TableXYDataset tdataset = (TableXYDataset) dataset;
    int itemCount = tdataset.getItemCount();
    // get the data point...
    double x1 = dataset.getXValue(series, item);
    double y1 = dataset.getYValue(series, item);
    boolean nullPoint = false;
    if (Double.isNaN(y1)) {
        y1 = 0.0;
        nullPoint = true;
    }
    // Get height adjustment based on stack and translate to Java2D values
    double ph1 = getPreviousHeight(tdataset, series, item);
    double transX1 = domainAxis.valueToJava2D(x1, dataArea, plot.getDomainAxisEdge());
    double transY1 = rangeAxis.valueToJava2D(y1 + ph1, dataArea, plot.getRangeAxisEdge());
    // Get series Paint and Stroke
    Paint seriesPaint = getItemPaint(series, item);
    Paint seriesFillPaint = seriesPaint;
    if (getUseFillPaint()) {
        seriesFillPaint = getItemFillPaint(series, item);
    }
    Stroke seriesStroke = getItemStroke(series, item);
    if (pass == 0) {
        if (item == 0) {
            // Create a new Area for the series
            areaState.setSeriesArea(new Polygon());
            areaState.setLastSeriesPoints(areaState.getCurrentSeriesPoints());
            areaState.setCurrentSeriesPoints(new Stack());
            // start from previous height (ph1)
            double transY2 = rangeAxis.valueToJava2D(ph1, dataArea, plot.getRangeAxisEdge());
            // The first point is (x, 0)
            if (orientation == PlotOrientation.VERTICAL) {
                areaState.getSeriesArea().addPoint((int) transX1, (int) transY2);
            } else if (orientation == PlotOrientation.HORIZONTAL) {
                areaState.getSeriesArea().addPoint((int) transY2, (int) transX1);
            }
        }
        // Add each point to Area (x, y)
        if (orientation == PlotOrientation.VERTICAL) {
            Point point = new Point((int) transX1, (int) transY1);
            areaState.getSeriesArea().addPoint((int) point.getX(), (int) point.getY());
            areaState.getCurrentSeriesPoints().push(point);
        } else if (orientation == PlotOrientation.HORIZONTAL) {
            areaState.getSeriesArea().addPoint((int) transY1, (int) transX1);
        }
        if (getPlotLines()) {
            if (item > 0) {
                // get the previous data point...
                double x0 = dataset.getXValue(series, item - 1);
                double y0 = dataset.getYValue(series, item - 1);
                double ph0 = getPreviousHeight(tdataset, series, item - 1);
                double transX0 = domainAxis.valueToJava2D(x0, dataArea, plot.getDomainAxisEdge());
                double transY0 = rangeAxis.valueToJava2D(y0 + ph0, dataArea, plot.getRangeAxisEdge());
                if (orientation == PlotOrientation.VERTICAL) {
                    areaState.getLine().setLine(transX0, transY0, transX1, transY1);
                } else if (orientation == PlotOrientation.HORIZONTAL) {
                    areaState.getLine().setLine(transY0, transX0, transY1, transX1);
                }
                g2.setPaint(seriesPaint);
                g2.setStroke(seriesStroke);
                g2.draw(areaState.getLine());
            }
        }
        // items > 0.  We can't draw an area for a single point.
        if (getPlotArea() && item > 0 && item == (itemCount - 1)) {
            double transY2 = rangeAxis.valueToJava2D(ph1, dataArea, plot.getRangeAxisEdge());
            if (orientation == PlotOrientation.VERTICAL) {
                // Add the last point (x,0)
                areaState.getSeriesArea().addPoint((int) transX1, (int) transY2);
            } else if (orientation == PlotOrientation.HORIZONTAL) {
                // Add the last point (x,0)
                areaState.getSeriesArea().addPoint((int) transY2, (int) transX1);
            }
            // polygon
            if (series != 0) {
                Stack points = areaState.getLastSeriesPoints();
                while (!points.empty()) {
                    Point point = (Point) points.pop();
                    areaState.getSeriesArea().addPoint((int) point.getX(), (int) point.getY());
                }
            }
            // Fill the polygon
            g2.setPaint(seriesFillPaint);
            g2.setStroke(seriesStroke);
            g2.fill(areaState.getSeriesArea());
            // Draw an outline around the Area.
            if (isOutline()) {
                g2.setStroke(lookupSeriesOutlineStroke(series));
                g2.setPaint(lookupSeriesOutlinePaint(series));
                g2.draw(areaState.getSeriesArea());
            }
        }
        int domainAxisIndex = plot.getDomainAxisIndex(domainAxis);
        int rangeAxisIndex = plot.getRangeAxisIndex(rangeAxis);
        updateCrosshairValues(crosshairState, x1, ph1 + y1, domainAxisIndex, rangeAxisIndex, transX1, transY1, orientation);
    } else if (pass == 1) {
        // On second pass render shapes and collect entity and tooltip
        // information
        Shape shape = null;
        if (getPlotShapes()) {
            shape = getItemShape(series, item);
            if (plot.getOrientation() == PlotOrientation.VERTICAL) {
                shape = ShapeUtilities.createTranslatedShape(shape, transX1, transY1);
            } else if (plot.getOrientation() == PlotOrientation.HORIZONTAL) {
                shape = ShapeUtilities.createTranslatedShape(shape, transY1, transX1);
            }
            if (!nullPoint) {
                if (getShapePaint() != null) {
                    g2.setPaint(getShapePaint());
                } else {
                    g2.setPaint(seriesPaint);
                }
                if (getShapeStroke() != null) {
                    g2.setStroke(getShapeStroke());
                } else {
                    g2.setStroke(seriesStroke);
                }
                g2.draw(shape);
            }
        } else {
            if (plot.getOrientation() == PlotOrientation.VERTICAL) {
                shape = new Rectangle2D.Double(transX1 - 3, transY1 - 3, 6.0, 6.0);
            } else if (plot.getOrientation() == PlotOrientation.HORIZONTAL) {
                shape = new Rectangle2D.Double(transY1 - 3, transX1 - 3, 6.0, 6.0);
            }
        }
        // collect entity and tool tip information...
        if (state.getInfo() != null) {
            EntityCollection entities = state.getEntityCollection();
            if (entities != null && shape != null && !nullPoint) {
                String tip = null;
                XYToolTipGenerator generator = getToolTipGenerator(series, item);
                if (generator != null) {
                    tip = generator.generateToolTip(dataset, series, item);
                }
                String url = null;
                if (getURLGenerator() != null) {
                    url = getURLGenerator().generateURL(dataset, series, item);
                }
                XYItemEntity entity = new XYItemEntity(shape, dataset, series, item, tip, url);
                entities.add(entity);
            }
        }
    }
}
Also used : PlotOrientation(org.jfree.chart.plot.PlotOrientation) Stroke(java.awt.Stroke) Shape(java.awt.Shape) TableXYDataset(org.jfree.data.xy.TableXYDataset) Rectangle2D(java.awt.geom.Rectangle2D) Paint(java.awt.Paint) Point(java.awt.Point) Point(java.awt.Point) Paint(java.awt.Paint) Stack(java.util.Stack) XYItemEntity(org.jfree.chart.entity.XYItemEntity) EntityCollection(org.jfree.chart.entity.EntityCollection) XYToolTipGenerator(org.jfree.chart.labels.XYToolTipGenerator) Polygon(java.awt.Polygon)

Example 7 with TableXYDataset

use of org.jfree.data.xy.TableXYDataset in project SIMVA-SoS by SESoS.

the class StackedXYBarRendererTest method testFindDomainBounds.

/**
 * Check that the renderer is calculating the domain bounds correctly.
 */
@Test
public void testFindDomainBounds() {
    TableXYDataset dataset = RendererXYPackageUtils.createTestTableXYDataset();
    JFreeChart chart = ChartFactory.createStackedXYAreaChart("Test Chart", "X", "Y", dataset, PlotOrientation.VERTICAL, false, false, false);
    XYPlot plot = (XYPlot) chart.getPlot();
    plot.setRenderer(new StackedXYBarRenderer());
    NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
    domainAxis.setAutoRangeIncludesZero(false);
    Range bounds = domainAxis.getRange();
    assertFalse(bounds.contains(0.3));
    assertTrue(bounds.contains(0.5));
    assertTrue(bounds.contains(2.5));
    assertFalse(bounds.contains(2.8));
}
Also used : NumberAxis(org.jfree.chart.axis.NumberAxis) XYPlot(org.jfree.chart.plot.XYPlot) TableXYDataset(org.jfree.data.xy.TableXYDataset) Range(org.jfree.data.Range) JFreeChart(org.jfree.chart.JFreeChart) Test(org.junit.Test)

Example 8 with TableXYDataset

use of org.jfree.data.xy.TableXYDataset in project SIMVA-SoS by SESoS.

the class StackedXYBarRendererTest method testFindRangeBounds.

/**
 * Check that the renderer is calculating the range bounds correctly.
 */
@Test
public void testFindRangeBounds() {
    TableXYDataset dataset = RendererXYPackageUtils.createTestTableXYDataset();
    JFreeChart chart = ChartFactory.createStackedXYAreaChart("Test Chart", "X", "Y", dataset, PlotOrientation.VERTICAL, false, false, false);
    XYPlot plot = (XYPlot) chart.getPlot();
    plot.setRenderer(new StackedXYBarRenderer());
    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    Range bounds = rangeAxis.getRange();
    assertTrue(bounds.contains(6.0));
    assertTrue(bounds.contains(8.0));
}
Also used : NumberAxis(org.jfree.chart.axis.NumberAxis) XYPlot(org.jfree.chart.plot.XYPlot) TableXYDataset(org.jfree.data.xy.TableXYDataset) Range(org.jfree.data.Range) JFreeChart(org.jfree.chart.JFreeChart) Test(org.junit.Test)

Example 9 with TableXYDataset

use of org.jfree.data.xy.TableXYDataset in project SIMVA-SoS by SESoS.

the class StackedXYAreaRendererTest method testFindRangeBounds.

/**
 * Check that the renderer is calculating the range bounds correctly.
 */
@Test
public void testFindRangeBounds() {
    TableXYDataset dataset = RendererXYPackageUtils.createTestTableXYDataset();
    JFreeChart chart = ChartFactory.createStackedXYAreaChart("Test Chart", "X", "Y", dataset, PlotOrientation.VERTICAL, false, false, false);
    XYPlot plot = (XYPlot) chart.getPlot();
    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    Range bounds = rangeAxis.getRange();
    assertTrue(bounds.contains(6.0));
    assertTrue(bounds.contains(8.0));
}
Also used : NumberAxis(org.jfree.chart.axis.NumberAxis) XYPlot(org.jfree.chart.plot.XYPlot) TableXYDataset(org.jfree.data.xy.TableXYDataset) DefaultTableXYDataset(org.jfree.data.xy.DefaultTableXYDataset) Range(org.jfree.data.Range) JFreeChart(org.jfree.chart.JFreeChart) Test(org.junit.Test)

Example 10 with TableXYDataset

use of org.jfree.data.xy.TableXYDataset in project SIMVA-SoS by SESoS.

the class XYLineAndShapeRendererTest method testFindRangeBounds.

/**
 * Check that the renderer is calculating the range bounds correctly.
 */
@Test
public void testFindRangeBounds() {
    TableXYDataset dataset = RendererXYPackageUtils.createTestTableXYDataset();
    JFreeChart chart = ChartFactory.createXYLineChart("Test Chart", "X", "Y", dataset, PlotOrientation.VERTICAL, false, false, false);
    XYPlot plot = (XYPlot) chart.getPlot();
    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setAutoRangeIncludesZero(false);
    Range bounds = rangeAxis.getRange();
    assertFalse(bounds.contains(1.0));
    assertTrue(bounds.contains(2.0));
    assertTrue(bounds.contains(5.0));
    assertFalse(bounds.contains(6.0));
}
Also used : NumberAxis(org.jfree.chart.axis.NumberAxis) XYPlot(org.jfree.chart.plot.XYPlot) TableXYDataset(org.jfree.data.xy.TableXYDataset) Range(org.jfree.data.Range) JFreeChart(org.jfree.chart.JFreeChart) Test(org.junit.Test)

Aggregations

TableXYDataset (org.jfree.data.xy.TableXYDataset)10 Range (org.jfree.data.Range)7 Test (org.junit.Test)6 JFreeChart (org.jfree.chart.JFreeChart)5 NumberAxis (org.jfree.chart.axis.NumberAxis)5 XYPlot (org.jfree.chart.plot.XYPlot)5 Paint (java.awt.Paint)3 EntityCollection (org.jfree.chart.entity.EntityCollection)3 PlotOrientation (org.jfree.chart.plot.PlotOrientation)3 DefaultTableXYDataset (org.jfree.data.xy.DefaultTableXYDataset)3 Shape (java.awt.Shape)2 Rectangle2D (java.awt.geom.Rectangle2D)2 RectangleEdge (org.jfree.ui.RectangleEdge)2 Point (java.awt.Point)1 Polygon (java.awt.Polygon)1 Stroke (java.awt.Stroke)1 GeneralPath (java.awt.geom.GeneralPath)1 Stack (java.util.Stack)1 XYItemEntity (org.jfree.chart.entity.XYItemEntity)1 XYItemLabelGenerator (org.jfree.chart.labels.XYItemLabelGenerator)1