package charts.graphics; import java.awt.Color; import java.awt.Dimension; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.DateTickUnit; import org.jfree.chart.axis.DateTickUnitType; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.NumberTickUnit; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.ui.RectangleInsets; import charts.Drawable; import charts.jfree.ATSCollection; import charts.jfree.Attribute; public class CotsOutbreak { public Drawable createChart(final ATSCollection dataset, Dimension dimension) { JFreeChart chart = ChartFactory.createTimeSeriesChart( dataset.get(Attribute.TITLE), // title dataset.get(Attribute.X_AXIS_LABEL), // x-axis label dataset.get(Attribute.Y_AXIS_LABEL), // y-axis label dataset, // data false, // create legend? false, // generate tooltips? false // generate URLs? ); chart.setBackgroundPaint(Color.white); XYPlot plot = (XYPlot) chart.getPlot(); plot.setBackgroundPaint(Color.white); plot.setDomainGridlinePaint(Color.lightGray); plot.setRangeGridlinePaint(Color.lightGray); plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); plot.setDomainCrosshairVisible(true); plot.setRangeCrosshairVisible(true); final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setAutoRangeIncludesZero(true); rangeAxis.setTickUnit(new NumberTickUnit( (Math.round(Math.floor(getMaxOutbreaks(dataset)))/20)+1, new DecimalFormat("0"))); XYItemRenderer r = plot.getRenderer(); r.setSeriesPaint(0, dataset.get(Attribute.SERIES_COLOR)); DateAxis axis = (DateAxis) plot.getDomainAxis(); final SimpleDateFormat dateFormatter = new SimpleDateFormat("yy"); axis.setDateFormatOverride(dateFormatter); DateTickUnit unit = new DateTickUnit(DateTickUnitType.YEAR, 1, dateFormatter); axis.setTickUnit(unit); return new JFreeChartDrawable(chart, dimension); } public double getMaxOutbreaks(XYDataset dataset) { double result = 0; for(int i=0;i<dataset.getItemCount(0);i++) { Number n = dataset.getY(0, i); if(n!= null) { result = Math.max(n.doubleValue(), result); } } return result; } }