package eu.choreos.vv.chart;
/**
* JFreeChartDemo
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* More than 150 demo applications are included with the JFreeChart
* Developer Guide. For more information, see:
*
* JFreeChart Developer's Guide
*/
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Stroke;
import java.text.NumberFormat;
import java.util.List;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.TickUnitSource;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.labels.XYItemLabelGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.AbstractIntervalXYDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.YIntervalSeries;
import org.jfree.data.xy.YIntervalSeriesCollection;
import eu.choreos.vv.data.PlotData;
import eu.choreos.vv.data.StatisticalData;
public class LineChart extends JFrame {
private static final long serialVersionUID = 1L;
// public LineChart(String applicationTitle, String chartTitle, List<PlotData> reports, String xLabel, String yLabel) {
// super(applicationTitle);
//
// this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//
// YIntervalSeriesCollection dataset = new YIntervalSeriesCollection();
//
// for (PlotData report : reports) {
// createDataset(dataset, (StatisticalData)report);
// }
// // based on the dataset we create the chart
// JFreeChart chart = createChart(dataset, chartTitle, xLabel, yLabel);
// // we put the chart into a panel
// ChartPanel chartPanel = new ChartPanel(chart);
// // default size
// chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
// // add it to our application
// setContentPane(chartPanel);
//
// }
public static ChartPanel createChart(String chartTitle, List<PlotData> reports, String xLabel, String yLabel, AbstractIntervalXYDataset dataset, XYLineAndShapeRenderer renderer) {
// YIntervalSeriesCollection dataset = new YIntervalSeriesCollection();
//
// for (PlotData report : reports) {
// createDataset(dataset, (StatisticalData)report);
// }
JFreeChart chart = createChart(dataset, chartTitle, xLabel, yLabel, renderer);
ChartPanel panel = new ChartPanel(chart);
return panel;
}
// private static void createDataset(YIntervalSeriesCollection dataset, StatisticalData report) {
// YIntervalSeries series = new YIntervalSeries(report.getName());
// for (Double x: report.keySet()) {
// Double y = report.get(x).getMean();
// Double sd = report.get(x).getStandardDeviation();
// series.add(x, y, y-sd, y+sd);
// }
// dataset.addSeries(series);
// }
private static JFreeChart createChart(XYDataset dataset, String chartTitle, String xLabel, String yLabel, XYLineAndShapeRenderer renderer) {
// create the chart...
JFreeChart chart = ChartFactory.createXYLineChart(
chartTitle, // chart title
xLabel, // domain axis label
yLabel, // range axis label
dataset, // initial series
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);
// set chart background
chart.setBackgroundPaint(Color.white);
// set a few custom plot features
XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(new Color(0xffffe0));
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlinePaint(Color.lightGray);
plot.setRangeGridlinePaint(Color.lightGray);
// set the plot's axes to display integers
TickUnitSource ticks = NumberAxis.createIntegerTickUnits();
NumberAxis domain = (NumberAxis) plot.getDomainAxis();
domain.setStandardTickUnits(ticks);
domain.resizeRange(1.1);
domain.setLowerBound(0.5);
NumberAxis range = (NumberAxis) plot.getRangeAxis();
range.setStandardTickUnits(ticks);
range.setUpperBound(range.getUpperBound()*1.1);
// render shapes and lines
// DeviationRenderer renderer =
// new DeviationRenderer(true, true);
plot.setRenderer(renderer);
renderer.setBaseShapesVisible(true);
renderer.setBaseShapesFilled(true);
// set the renderer's stroke
Stroke stroke = new BasicStroke(
3f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL);
renderer.setBaseOutlineStroke(stroke);
//TODO: render the deviation with the same color as the line
// renderer.setBaseFillPaint(new Color(255, 200, 200));
// renderer.setUseOutlinePaint(flag);
// renderer.setUseFillPaint(flag);
// label the points
NumberFormat format = NumberFormat.getNumberInstance();
format.setMaximumFractionDigits(2);
XYItemLabelGenerator generator =
new StandardXYItemLabelGenerator(
StandardXYItemLabelGenerator.DEFAULT_ITEM_LABEL_FORMAT,
format, format);
renderer.setBaseItemLabelGenerator(generator);
renderer.setBaseItemLabelsVisible(true);
//TODO: fix the visible area to show the deviation
return chart;
}
}