Using StackedXYBarRenderer with TimeTableXYDataset

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
dsw2
Posts: 4
Joined: Tue Mar 14, 2006 1:03 am

Using StackedXYBarRenderer with TimeTableXYDataset

Post by dsw2 » Thu Oct 27, 2011 1:25 am

Hi. I'm stuck trying to get a StackedXYBarRenderer to plot the series along a timeline. What I'm trying to do is very close to the XYBarChartDemo7 example, but using a StackedXYBarRenderer.

The idea is to plot two series of dates along a 2-year timeline (2011 to 2013), with each series stacked with milestone dates approx. 4 months apart.

Since a StackedXYBarRenderer needs a TableXYDataset, the TimeTableXYDataset looked appropriate. The problem is that I can't get any data to render, so I think I'm not using the TimeTableXYDataset correctly. Below the code I'm trying to use to generate the chart. Can someone check and see if I'm headed in the right direction (especially in the createDataset() method?

Thanks in advance,
Dave

Code: Select all

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JPanel;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.SymbolAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StackedXYBarRenderer;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeTableXYDataset;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class MyStackedXYBarTest_3ed extends ApplicationFrame {

    private static final long serialVersionUID = 1L;

    public MyStackedXYBarTest_3ed(String title) {
        super(title);
        JPanel panel = new ChartPanel(createChart());
        panel.setPreferredSize(new Dimension(500, 300));
        setContentPane(panel);
    }

    private static JFreeChart createChart() {

        //1 - create plot
        XYPlot xyPlot = new XYPlot();
        xyPlot.setOrientation(PlotOrientation.HORIZONTAL);
        xyPlot.setBackgroundPaint(Color.white);

        //2 - add dataset to plot
        xyPlot.setDataset(createDataset());

        //3 - add domain axis to plot
        SymbolAxis symbolAxis = new SymbolAxis("", new String[] { "Time Series 1", "Time Series 2" });
        xyPlot.setDomainAxis(symbolAxis);

        //4 - add range axis to plot
        DateAxis dateAxis = new DateAxis("Timeline");
        dateAxis.setLowerBound(new Day(1, 1, 2011).getFirstMillisecond());
        dateAxis.setUpperBound(new Day(31, 12, 2012).getLastMillisecond());
        xyPlot.setRangeAxis(dateAxis);

        //5 - add renderer to plot
        StackedXYBarRenderer renderer = new StackedXYBarRenderer();
        renderer.setUseYInterval(true);	//?
        xyPlot.setRenderer(renderer);

        return new JFreeChart(xyPlot);
    }

    private static IntervalXYDataset createDataset() {

        TimeTableXYDataset dataset = new TimeTableXYDataset();
        dataset.setDomainIsPointsInTime(true);

        dataset.add(new Day(1, 6, 2011), 1, "ts1");     //start date
        dataset.add(new Day(1, 11, 2011), 1, "ts1");	//milestone date 1
        dataset.add(new Day(1, 3, 2012), 1, "ts1");		//milestone date 2
        dataset.add(new Day(1, 7, 2012), 1, "ts1");

        dataset.add(new Day(1, 3, 2011), 2, "ts2");		//start date
        dataset.add(new Day(1, 7, 2011), 2, "ts2");		//milestone date 1
        dataset.add(new Day(1, 11, 2011), 2, "ts2");

        return dataset;
    }

    public static void main(String[] paramArrayOfString) {
        MyStackedXYBarTest_3ed chart = new MyStackedXYBarTest_3ed("TEST");
        chart.pack();
        RefineryUtilities.centerFrameOnScreen(chart);
        chart.setVisible(true);
    }
}

Locked