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);
}
}