StackedXYAreaChart - Not able to get correct order of colors

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
lukkumar
Posts: 17
Joined: Thu Jun 07, 2007 8:10 pm

StackedXYAreaChart - Not able to get correct order of colors

Post by lukkumar » Tue Jun 12, 2007 10:41 pm

I have written a demo application for StackedXYAreaChart and what I have observed was that the colors for series were not displayed in the correct order.

Please see the below code::

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.geom.Ellipse2D;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.text.NumberFormat;
import java.util.Locale;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StackedXYAreaRenderer;
import org.jfree.chart.renderer.xy.XYAreaRenderer;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.data.xy.DefaultTableXYDataset;
import org.jfree.data.xy.TableXYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;


public class StackedXYAreaChartDemo extends ApplicationFrame {


public StackedXYAreaChartDemo(String title) {

super(title);

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.UK);
XYSeries series1 = new XYSeries("Series 1", true, false);
XYSeries series2 = new XYSeries("Series 2", true, false);
XYSeries series3 = new XYSeries("Series 3", true, false);
try {
series1.add(sdf.parse("03-Jul-2003").getTime(), 115);
series1.add(sdf.parse("04-Jul-2003").getTime(), 120);
series1.add(sdf.parse("07-Jul-2003").getTime(), 125);
series1.add(sdf.parse("08-Jul-2003").getTime(), 160);
series1.add(sdf.parse("09-Jul-2003").getTime(), 175);
series1.add(sdf.parse("10-Jul-2003").getTime(), 140);
series1.add(sdf.parse("11-Jul-2003").getTime(), 145);
series1.add(sdf.parse("14-Jul-2003").getTime(), 150);
series1.add(sdf.parse("15-Jul-2003").getTime(), 155);
series1.add(sdf.parse("16-Jul-2003").getTime(), 160);
series1.add(sdf.parse("17-Jul-2003").getTime(), 165);
series1.add(sdf.parse("18-Jul-2003").getTime(), 170);

series2.add(sdf.parse("30-Jun-2003").getTime(), 50);
series2.add(sdf.parse("01-Jul-2003").getTime(), 60);
series2.add(sdf.parse("02-Jul-2003").getTime(), 70);
series2.add(sdf.parse("03-Jul-2003").getTime(), 80);
series2.add(sdf.parse("04-Jul-2003").getTime(), 90);
series2.add(sdf.parse("07-Jul-2003").getTime(), 100);
series2.add(sdf.parse("08-Jul-2003").getTime(), 110);
series2.add(sdf.parse("09-Jul-2003").getTime(), 120);
series2.add(sdf.parse("10-Jul-2003").getTime(), 130);
series2.add(sdf.parse("11-Jul-2003").getTime(), 140);
series2.add(sdf.parse("14-Jul-2003").getTime(), 150);
series2.add(sdf.parse("15-Jul-2003").getTime(), 160);
series2.add(sdf.parse("16-Jul-2003").getTime(), 170);
series2.add(sdf.parse("17-Jul-2003").getTime(), 180);
series2.add(sdf.parse("18-Jul-2003").getTime(), 190);

series3.add(sdf.parse("30-Jun-2003").getTime(), 100);
series3.add(sdf.parse("01-Jul-2003").getTime(), 120);
series3.add(sdf.parse("02-Jul-2003").getTime(), 110);
series3.add(sdf.parse("03-Jul-2003").getTime(), 120);
series3.add(sdf.parse("04-Jul-2003").getTime(), 130);
series3.add(sdf.parse("07-Jul-2003").getTime(), 135);
series3.add(sdf.parse("08-Jul-2003").getTime(), 140);
series3.add(sdf.parse("09-Jul-2003").getTime(), 155);
series3.add(sdf.parse("10-Jul-2003").getTime(), 130);
series3.add(sdf.parse("11-Jul-2003").getTime(), 135);
series3.add(sdf.parse("14-Jul-2003").getTime(), 140);
series3.add(sdf.parse("15-Jul-2003").getTime(), 165);
series3.add(sdf.parse("16-Jul-2003").getTime(), 170);
series3.add(sdf.parse("17-Jul-2003").getTime(), 165);
series3.add(sdf.parse("18-Jul-2003").getTime(), 140);
}
catch (ParseException e) {
// Not likely, given that the dates are hard-coded
e.printStackTrace();
}
DefaultTableXYDataset dataset = new DefaultTableXYDataset();
dataset.addSeries(series1);
dataset.addSeries(series2);
dataset.addSeries(series3);

JFreeChart chart = createChart(dataset);

ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);

}


private JFreeChart createChart(TableXYDataset dataset) {



SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.UK);
StandardXYToolTipGenerator ttg = new StandardXYToolTipGenerator(
StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
sdf, NumberFormat.getInstance());

DateAxis xAxis = new DateAxis("Domain (X)");
xAxis.setLowerMargin(0.0);
xAxis.setUpperMargin(0.0);

NumberAxis yAxis = new NumberAxis("Range (Y)");
yAxis.setAutoRangeIncludesZero(true);
StackedXYAreaRenderer renderer = new StackedXYAreaRenderer(
XYAreaRenderer.AREA_AND_SHAPES, ttg, null
);
renderer.setOutline(true);
renderer.setSeriesPaint(0, new Color(255, 255, 206));
renderer.setSeriesPaint(1, new Color(206, 230, 255));
renderer.setSeriesPaint(2, new Color(255, 230, 230));
renderer.setShapePaint(Color.gray);
renderer.setShapeStroke(new BasicStroke(0.5f));
renderer.setShape(new Ellipse2D.Double(-3, -3, 6, 6));
XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer);

JFreeChart chart = new JFreeChart(null, JFreeChart.DEFAULT_TITLE_FONT, plot, true);

return chart;
}


public static void main(String[] args) {
StackedXYAreaChartDemo demo = new StackedXYAreaChartDemo("Stacked Area XY Chart Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}

}



Please see if the code is correct. I am not able to get the correct order of colors for the series.

Thanks.

Locked