Source for org.jfree.chart.ChartFactory

   1: /* ===========================================================
   2:  * JFreeChart : a free chart library for the Java(tm) platform
   3:  * ===========================================================
   4:  *
   5:  * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors.
   6:  *
   7:  * Project Info:  http://www.jfree.org/jfreechart/index.html
   8:  *
   9:  * This library is free software; you can redistribute it and/or modify it 
  10:  * under the terms of the GNU Lesser General Public License as published by 
  11:  * the Free Software Foundation; either version 2.1 of the License, or 
  12:  * (at your option) any later version.
  13:  *
  14:  * This library is distributed in the hope that it will be useful, but 
  15:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  16:  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
  17:  * License for more details.
  18:  *
  19:  * You should have received a copy of the GNU Lesser General Public
  20:  * License along with this library; if not, write to the Free Software
  21:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
  22:  * USA.  
  23:  *
  24:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
  25:  * in the United States and other countries.]
  26:  *
  27:  * -----------------
  28:  * ChartFactory.java
  29:  * -----------------
  30:  * (C) Copyright 2001-2007, by Object Refinery Limited and Contributors.
  31:  *
  32:  * Original Author:  David Gilbert (for Object Refinery Limited);
  33:  * Contributor(s):   Serge V. Grachov;
  34:  *                   Joao Guilherme Del Valle;
  35:  *                   Bill Kelemen;
  36:  *                   Jon Iles;
  37:  *                   Jelai Wang;
  38:  *                   Richard Atkinson;
  39:  *                   David Browning (for Australian Institute of Marine 
  40:  *                       Science);
  41:  *                   Benoit Xhenseval;
  42:  *
  43:  * $Id: ChartFactory.java,v 1.22.2.10 2007/01/17 16:26:29 mungady Exp $
  44:  *
  45:  * Changes
  46:  * -------
  47:  * 19-Oct-2001 : Version 1, most methods transferred from JFreeChart.java (DG);
  48:  * 22-Oct-2001 : Added methods to create stacked bar charts (DG);
  49:  *               Renamed DataSource.java --> Dataset.java etc. (DG);
  50:  * 31-Oct-2001 : Added 3D-effect vertical bar and stacked-bar charts, 
  51:  *               contributed by Serge V. Grachov (DG);
  52:  * 07-Nov-2001 : Added a flag to control whether or not a legend is added to 
  53:  *               the chart (DG);
  54:  * 17-Nov-2001 : For pie chart, changed dataset from CategoryDataset to 
  55:  *               PieDataset (DG);
  56:  * 30-Nov-2001 : Removed try/catch handlers from chart creation, as the 
  57:  *               exception are now RuntimeExceptions, as suggested by Joao 
  58:  *               Guilherme Del Valle (DG);
  59:  * 06-Dec-2001 : Added createCombinableXXXXXCharts methods (BK);
  60:  * 12-Dec-2001 : Added createCandlestickChart() method (DG);
  61:  * 13-Dec-2001 : Updated methods for charts with new renderers (DG);
  62:  * 08-Jan-2002 : Added import for 
  63:  *               com.jrefinery.chart.combination.CombinedChart (DG);
  64:  * 31-Jan-2002 : Changed the createCombinableVerticalXYBarChart() method to use
  65:  *               renderer (DG);
  66:  * 06-Feb-2002 : Added new method createWindPlot() (DG);
  67:  * 23-Apr-2002 : Updates to the chart and plot constructor API (DG);
  68:  * 21-May-2002 : Added new method createAreaChart() (JI);
  69:  * 06-Jun-2002 : Added new method createGanttChart() (DG);
  70:  * 11-Jun-2002 : Renamed createHorizontalStackedBarChart() 
  71:  *               --> createStackedHorizontalBarChart() for consistency (DG);
  72:  * 06-Aug-2002 : Updated Javadoc comments (DG);
  73:  * 21-Aug-2002 : Added createPieChart(CategoryDataset) method (DG);
  74:  * 02-Oct-2002 : Fixed errors reported by Checkstyle (DG);
  75:  * 09-Oct-2002 : Added methods including tooltips and URL flags (DG);
  76:  * 06-Nov-2002 : Moved renderers into a separate package (DG);
  77:  * 18-Nov-2002 : Changed CategoryDataset to TableDataset (DG);
  78:  * 21-Mar-2003 : Incorporated HorizontalCategoryAxis3D, see bug id 685501 (DG);
  79:  * 13-May-2003 : Merged some horizontal and vertical methods (DG);
  80:  * 24-May-2003 : Added support for timeline in createHighLowChart (BK);
  81:  * 07-Jul-2003 : Added createHistogram() method contributed by Jelai Wang (DG);
  82:  * 27-Jul-2003 : Added createStackedAreaXYChart() method (RA);
  83:  * 05-Aug-2003 : added new method createBoxAndWhiskerChart (DB);
  84:  * 08-Sep-2003 : Changed ValueAxis API (DG);
  85:  * 07-Oct-2003 : Added stepped area XY chart contributed by Matthias Rose (DG);
  86:  * 06-Nov-2003 : Added createWaterfallChart() method (DG);
  87:  * 20-Nov-2003 : Set rendering order for 3D bar charts to fix overlapping 
  88:  *               problems (DG);
  89:  * 25-Nov-2003 : Added createWaferMapChart() method (DG);
  90:  * 23-Dec-2003 : Renamed createPie3DChart() --> createPieChart3D for 
  91:  *               consistency (DG);
  92:  * 20-Jan-2004 : Added createPolarChart() method (DG);
  93:  * 28-Jan-2004 : Fixed bug (882890) with axis range in 
  94:  *               createStackedXYAreaChart() method (DG);
  95:  * 25-Feb-2004 : Renamed XYToolTipGenerator --> XYItemLabelGenerator (DG);
  96:  * 11-Mar-2004 : Updated for pie chart changes (DG);
  97:  * 27-Apr-2004 : Added new createPieChart() method contributed by Benoit 
  98:  *               Xhenseval (see RFE 942195) (DG);
  99:  * 11-May-2004 : Split StandardCategoryItemLabelGenerator 
 100:  *               --> StandardCategoryToolTipGenerator and
 101:  *               StandardCategoryLabelGenerator (DG);
 102:  * 06-Jan-2005 : Removed deprecated methods (DG);
 103:  * 27-Jan-2005 : Added new constructor to LineAndShapeRenderer (DG);
 104:  * 28-Feb-2005 : Added docs to createBubbleChart() method (DG);
 105:  * 17-Mar-2005 : Added createRingPlot() method (DG);
 106:  * 21-Apr-2005 : Replaced Insets with RectangleInsets (DG);
 107:  * 29-Nov-2005 : Removed signal chart (DG);
 108:  * ------------- JFREECHART 1.0.x ---------------------------------------------
 109:  * 26-Jan-2006 : Corrected API docs for createScatterPlot() (DG);
 110:  * 23-Aug-2006 : Modified createStackedXYAreaChart() to use 
 111:  *               StackedXYAreaRenderer2, because StackedXYAreaRenderer doesn't
 112:  *               handle negative values (DG);
 113:  * 27-Sep-2006 : Update createPieChart() method for deprecated code (DG);
 114:  * 29-Nov-2006 : Update createXYBarChart() to use a time based tool tip 
 115:  *               generator is a DateAxis is requested (DG);
 116:  * 17-Jan-2007 : Added createBoxAndWhiskerChart() method from patch 1603937
 117:  *               submitted by Darren Jung (DG);
 118:  *
 119:  */
 120: 
 121: package org.jfree.chart;
 122: 
 123: import java.awt.Color;
 124: import java.awt.Font;
 125: import java.text.DateFormat;
 126: import java.text.NumberFormat;
 127: import java.util.Iterator;
 128: import java.util.List;
 129: 
 130: import org.jfree.chart.axis.CategoryAxis;
 131: import org.jfree.chart.axis.CategoryAxis3D;
 132: import org.jfree.chart.axis.DateAxis;
 133: import org.jfree.chart.axis.NumberAxis;
 134: import org.jfree.chart.axis.NumberAxis3D;
 135: import org.jfree.chart.axis.Timeline;
 136: import org.jfree.chart.axis.ValueAxis;
 137: import org.jfree.chart.labels.BoxAndWhiskerToolTipGenerator;
 138: import org.jfree.chart.labels.HighLowItemLabelGenerator;
 139: import org.jfree.chart.labels.IntervalCategoryToolTipGenerator;
 140: import org.jfree.chart.labels.ItemLabelAnchor;
 141: import org.jfree.chart.labels.ItemLabelPosition;
 142: import org.jfree.chart.labels.PieToolTipGenerator;
 143: import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
 144: import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
 145: import org.jfree.chart.labels.StandardPieToolTipGenerator;
 146: import org.jfree.chart.labels.StandardXYToolTipGenerator;
 147: import org.jfree.chart.labels.StandardXYZToolTipGenerator;
 148: import org.jfree.chart.labels.XYToolTipGenerator;
 149: import org.jfree.chart.plot.CategoryPlot;
 150: import org.jfree.chart.plot.Marker;
 151: import org.jfree.chart.plot.MultiplePiePlot;
 152: import org.jfree.chart.plot.PiePlot;
 153: import org.jfree.chart.plot.PiePlot3D;
 154: import org.jfree.chart.plot.PlotOrientation;
 155: import org.jfree.chart.plot.PolarPlot;
 156: import org.jfree.chart.plot.RingPlot;
 157: import org.jfree.chart.plot.ValueMarker;
 158: import org.jfree.chart.plot.WaferMapPlot;
 159: import org.jfree.chart.plot.XYPlot;
 160: import org.jfree.chart.renderer.DefaultPolarItemRenderer;
 161: import org.jfree.chart.renderer.WaferMapRenderer;
 162: import org.jfree.chart.renderer.category.AreaRenderer;
 163: import org.jfree.chart.renderer.category.BarRenderer;
 164: import org.jfree.chart.renderer.category.BarRenderer3D;
 165: import org.jfree.chart.renderer.category.BoxAndWhiskerRenderer;
 166: import org.jfree.chart.renderer.category.CategoryItemRenderer;
 167: import org.jfree.chart.renderer.category.GanttRenderer;
 168: import org.jfree.chart.renderer.category.LineAndShapeRenderer;
 169: import org.jfree.chart.renderer.category.LineRenderer3D;
 170: import org.jfree.chart.renderer.category.StackedAreaRenderer;
 171: import org.jfree.chart.renderer.category.StackedBarRenderer;
 172: import org.jfree.chart.renderer.category.StackedBarRenderer3D;
 173: import org.jfree.chart.renderer.category.WaterfallBarRenderer;
 174: import org.jfree.chart.renderer.xy.CandlestickRenderer;
 175: import org.jfree.chart.renderer.xy.HighLowRenderer;
 176: import org.jfree.chart.renderer.xy.StackedXYAreaRenderer2;
 177: import org.jfree.chart.renderer.xy.WindItemRenderer;
 178: import org.jfree.chart.renderer.xy.XYAreaRenderer;
 179: import org.jfree.chart.renderer.xy.XYBarRenderer;
 180: import org.jfree.chart.renderer.xy.XYBoxAndWhiskerRenderer;
 181: import org.jfree.chart.renderer.xy.XYBubbleRenderer;
 182: import org.jfree.chart.renderer.xy.XYItemRenderer;
 183: import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
 184: import org.jfree.chart.renderer.xy.XYStepAreaRenderer;
 185: import org.jfree.chart.renderer.xy.XYStepRenderer;
 186: import org.jfree.chart.title.TextTitle;
 187: import org.jfree.chart.urls.PieURLGenerator;
 188: import org.jfree.chart.urls.StandardCategoryURLGenerator;
 189: import org.jfree.chart.urls.StandardPieURLGenerator;
 190: import org.jfree.chart.urls.StandardXYURLGenerator;
 191: import org.jfree.chart.urls.StandardXYZURLGenerator;
 192: import org.jfree.chart.urls.XYURLGenerator;
 193: import org.jfree.data.category.CategoryDataset;
 194: import org.jfree.data.category.IntervalCategoryDataset;
 195: import org.jfree.data.general.DefaultPieDataset;
 196: import org.jfree.data.general.PieDataset;
 197: import org.jfree.data.general.WaferMapDataset;
 198: import org.jfree.data.statistics.BoxAndWhiskerCategoryDataset;
 199: import org.jfree.data.statistics.BoxAndWhiskerXYDataset;
 200: import org.jfree.data.xy.IntervalXYDataset;
 201: import org.jfree.data.xy.OHLCDataset;
 202: import org.jfree.data.xy.TableXYDataset;
 203: import org.jfree.data.xy.WindDataset;
 204: import org.jfree.data.xy.XYDataset;
 205: import org.jfree.data.xy.XYZDataset;
 206: import org.jfree.ui.Layer;
 207: import org.jfree.ui.RectangleEdge;
 208: import org.jfree.ui.RectangleInsets;
 209: import org.jfree.ui.TextAnchor;
 210: import org.jfree.util.SortOrder;
 211: import org.jfree.util.TableOrder;
 212: 
 213: /**
 214:  * A collection of utility methods for creating some standard charts with 
 215:  * JFreeChart.
 216:  */
 217: public abstract class ChartFactory {
 218: 
 219:     /**
 220:      * Creates a pie chart with default settings.
 221:      * <P>
 222:      * The chart object returned by this method uses a {@link PiePlot} instance 
 223:      * as the plot.
 224:      *
 225:      * @param title  the chart title (<code>null</code> permitted).
 226:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 227:      * @param legend  a flag specifying whether or not a legend is required.
 228:      * @param tooltips  configure chart to generate tool tips?
 229:      * @param urls  configure chart to generate URLs?
 230:      *
 231:      * @return A pie chart.
 232:      */
 233:     public static JFreeChart createPieChart(String title,
 234:                                             PieDataset dataset,
 235:                                             boolean legend,
 236:                                             boolean tooltips,
 237:                                             boolean urls) {
 238: 
 239:         PiePlot plot = new PiePlot(dataset);
 240:         plot.setLabelGenerator(new StandardPieSectionLabelGenerator());
 241:         plot.setInsets(new RectangleInsets(0.0, 5.0, 5.0, 5.0));
 242:         if (tooltips) {
 243:             plot.setToolTipGenerator(new StandardPieToolTipGenerator(
 244:                     StandardPieToolTipGenerator.DEFAULT_SECTION_LABEL_FORMAT));
 245:         }
 246:         if (urls) {
 247:             plot.setURLGenerator(new StandardPieURLGenerator());
 248:         }
 249:         return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, 
 250:                 legend);
 251: 
 252:     }
 253: 
 254:     /**
 255:      * Creates a pie chart with default settings that compares 2 datasets.  
 256:      * The colour of each section will be determined by the move from the value
 257:      * for the same key in <code>previousDataset</code>. ie if value1 > value2 
 258:      * then the section will be in green (unless <code>greenForIncrease</code> 
 259:      * is <code>false</code>, in which case it would be <code>red</code>).  
 260:      * Each section can have a shade of red or green as the difference can be 
 261:      * tailored between 0% (black) and percentDiffForMaxScale% (bright 
 262:      * red/green).
 263:      * <p>
 264:      * For instance if <code>percentDiffForMaxScale</code> is 10 (10%), a 
 265:      * difference of 5% will have a half shade of red/green, a difference of 
 266:      * 10% or more will have a maximum shade/brightness of red/green.
 267:      * <P>
 268:      * The chart object returned by this method uses a {@link PiePlot} instance
 269:      * as the plot.
 270:      * <p>
 271:      * Written by <a href="mailto:opensource@objectlab.co.uk">Benoit 
 272:      * Xhenseval</a>.
 273:      *
 274:      * @param title  the chart title (<code>null</code> permitted).
 275:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 276:      * @param previousDataset  the dataset for the last run, this will be used 
 277:      *                         to compare each key in the dataset
 278:      * @param percentDiffForMaxScale scale goes from bright red/green to black,
 279:      *                               percentDiffForMaxScale indicate the change 
 280:      *                               required to reach top scale.
 281:      * @param greenForIncrease  an increase since previousDataset will be 
 282:      *                          displayed in green (decrease red) if true.
 283:      * @param legend  a flag specifying whether or not a legend is required.
 284:      * @param tooltips  configure chart to generate tool tips?
 285:      * @param urls  configure chart to generate URLs?
 286:      * @param subTitle displays a subtitle with colour scheme if true
 287:      * @param showDifference  create a new dataset that will show the % 
 288:      *                        difference between the two datasets. 
 289:      *
 290:      * @return A pie chart.
 291:      */
 292:     public static JFreeChart createPieChart(String title,
 293:                                             PieDataset dataset,
 294:                                             PieDataset previousDataset,
 295:                                             int percentDiffForMaxScale,
 296:                                             boolean greenForIncrease,
 297:                                             boolean legend,
 298:                                             boolean tooltips,
 299:                                             boolean urls,
 300:                                             boolean subTitle,
 301:                                             boolean showDifference) {
 302: 
 303:         PiePlot plot = new PiePlot(dataset);
 304:         plot.setLabelGenerator(new StandardPieSectionLabelGenerator());
 305:         plot.setInsets(new RectangleInsets(0.0, 5.0, 5.0, 5.0));
 306: 
 307:         if (tooltips) {
 308:             plot.setToolTipGenerator(new StandardPieToolTipGenerator(
 309:                     StandardPieToolTipGenerator.DEFAULT_SECTION_LABEL_FORMAT));
 310:         }
 311:         if (urls) {
 312:             plot.setURLGenerator(new StandardPieURLGenerator());
 313:         }
 314: 
 315:         List keys = dataset.getKeys();
 316:         DefaultPieDataset series = null;
 317:         if (showDifference) {
 318:             series = new DefaultPieDataset();
 319:         }
 320: 
 321:         double colorPerPercent = 255.0 / percentDiffForMaxScale;
 322:         for (Iterator it = keys.iterator(); it.hasNext();) {
 323:             Comparable key = (Comparable) it.next();
 324:             Number newValue = dataset.getValue(key);
 325:             Number oldValue = previousDataset.getValue(key);
 326: 
 327:             if (oldValue == null) {
 328:                 if (greenForIncrease) {
 329:                     plot.setSectionPaint(key, Color.green);
 330:                 } 
 331:                 else {
 332:                     plot.setSectionPaint(key, Color.red);
 333:                 }
 334:                 if (showDifference) {
 335:                     series.setValue(key + " (+100%)", newValue);
 336:                 }
 337:             }
 338:             else {
 339:                 double percentChange = (newValue.doubleValue() 
 340:                         / oldValue.doubleValue() - 1.0) * 100.0;
 341:                 double shade
 342:                     = (Math.abs(percentChange) >= percentDiffForMaxScale ? 255
 343:                     : Math.abs(percentChange) * colorPerPercent);
 344:                 if (greenForIncrease 
 345:                         && newValue.doubleValue() > oldValue.doubleValue()
 346:                         || !greenForIncrease && newValue.doubleValue() 
 347:                         < oldValue.doubleValue()) {
 348:                     plot.setSectionPaint(key, new Color(0, (int) shade, 0));
 349:                 }
 350:                 else {
 351:                     plot.setSectionPaint(key, new Color((int) shade, 0, 0));
 352:                 }
 353:                 if (showDifference) {
 354:                     series.setValue(key + " (" + (percentChange >= 0 ? "+" : "") 
 355:                             + NumberFormat.getPercentInstance().format(
 356:                             percentChange / 100.0) + ")", newValue);
 357:                 }
 358:             }
 359:         }
 360: 
 361:         if (showDifference) {
 362:             plot.setDataset(series);
 363:         }
 364: 
 365:         JFreeChart chart =  new JFreeChart(
 366:             title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend
 367:         );
 368: 
 369:         if (subTitle) {
 370:             TextTitle subtitle = null;
 371:             subtitle = new TextTitle("Bright " + (greenForIncrease ? "red" 
 372:                     : "green") + "=change >=-" + percentDiffForMaxScale 
 373:                     + "%, Bright " + (!greenForIncrease ? "red" : "green") 
 374:                     + "=change >=+" + percentDiffForMaxScale + "%", 
 375:                     new Font("SansSerif", Font.PLAIN, 10));
 376:             chart.addSubtitle(subtitle);
 377:         }
 378: 
 379:         return chart;
 380:     }
 381: 
 382:     /**
 383:      * Creates a ring chart with default settings.
 384:      * <P>
 385:      * The chart object returned by this method uses a {@link RingPlot} 
 386:      * instance as the plot.
 387:      *
 388:      * @param title  the chart title (<code>null</code> permitted).
 389:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 390:      * @param legend  a flag specifying whether or not a legend is required.
 391:      * @param tooltips  configure chart to generate tool tips?
 392:      * @param urls  configure chart to generate URLs?
 393:      *
 394:      * @return A pie chart.
 395:      */
 396:     public static JFreeChart createRingChart(String title,
 397:                                              PieDataset dataset,
 398:                                              boolean legend,
 399:                                              boolean tooltips,
 400:                                              boolean urls) {
 401: 
 402:         RingPlot plot = new RingPlot(dataset);
 403:         plot.setLabelGenerator(new StandardPieSectionLabelGenerator());
 404:         plot.setInsets(new RectangleInsets(0.0, 5.0, 5.0, 5.0));
 405:         if (tooltips) {
 406:             plot.setToolTipGenerator(new StandardPieToolTipGenerator(
 407:                     StandardPieToolTipGenerator.DEFAULT_SECTION_LABEL_FORMAT));
 408:         }
 409:         if (urls) {
 410:             plot.setURLGenerator(new StandardPieURLGenerator());
 411:         }
 412:         return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, 
 413:                 legend);
 414: 
 415:     }
 416: 
 417:     /**
 418:      * Creates a chart that displays multiple pie plots.  The chart object 
 419:      * returned by this method uses a {@link MultiplePiePlot} instance as the
 420:      * plot.
 421:      *
 422:      * @param title  the chart title (<code>null</code> permitted).
 423:      * @param dataset  the dataset (<code>null</code> permitted).
 424:      * @param order  the order that the data is extracted (by row or by column)
 425:      *               (<code>null</code> not permitted).
 426:      * @param legend  include a legend?
 427:      * @param tooltips  generate tooltips?
 428:      * @param urls  generate URLs?
 429:      *
 430:      * @return A chart.
 431:      */
 432:     public static JFreeChart createMultiplePieChart(String title,
 433:                                                     CategoryDataset dataset,
 434:                                                     TableOrder order,
 435:                                                     boolean legend,
 436:                                                     boolean tooltips,
 437:                                                     boolean urls) {
 438: 
 439:         if (order == null) {
 440:             throw new IllegalArgumentException("Null 'order' argument.");
 441:         }
 442:         MultiplePiePlot plot = new MultiplePiePlot(dataset);
 443:         plot.setDataExtractOrder(order);
 444:         plot.setBackgroundPaint(null);
 445:         plot.setOutlineStroke(null);
 446: 
 447:         if (tooltips) {
 448:             PieToolTipGenerator tooltipGenerator 
 449:                 = new StandardPieToolTipGenerator();
 450:             PiePlot pp = (PiePlot) plot.getPieChart().getPlot();
 451:             pp.setToolTipGenerator(tooltipGenerator);
 452:         }
 453: 
 454:         if (urls) {
 455:             PieURLGenerator urlGenerator = new StandardPieURLGenerator();
 456:             PiePlot pp = (PiePlot) plot.getPieChart().getPlot();
 457:             pp.setURLGenerator(urlGenerator);
 458:         }
 459: 
 460:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
 461:                 plot, legend);
 462: 
 463:         return chart;
 464: 
 465:     }
 466: 
 467:     /**
 468:      * Creates a 3D pie chart using the specified dataset.  The chart object 
 469:      * returned by this method uses a {@link PiePlot3D} instance as the
 470:      * plot.
 471:      *
 472:      * @param title  the chart title (<code>null</code> permitted).
 473:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 474:      * @param legend  a flag specifying whether or not a legend is required.
 475:      * @param tooltips  configure chart to generate tool tips?
 476:      * @param urls  configure chart to generate URLs?
 477:      *
 478:      * @return A pie chart.
 479:      */
 480:     public static JFreeChart createPieChart3D(String title,
 481:                                               PieDataset dataset,
 482:                                               boolean legend,
 483:                                               boolean tooltips,
 484:                                               boolean urls) {
 485: 
 486:         PiePlot3D plot = new PiePlot3D(dataset);
 487:         plot.setInsets(new RectangleInsets(0.0, 5.0, 5.0, 5.0));
 488:         if (tooltips) {
 489:             plot.setToolTipGenerator(new StandardPieToolTipGenerator());
 490:         }
 491:         if (urls) {
 492:             plot.setURLGenerator(new StandardPieURLGenerator());
 493:         }
 494:         return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, 
 495:                 legend);
 496: 
 497:     }
 498: 
 499:     /**
 500:      * Creates a chart that displays multiple pie plots.  The chart object 
 501:      * returned by this method uses a {@link MultiplePiePlot} instance as the
 502:      * plot.
 503:      *
 504:      * @param title  the chart title (<code>null</code> permitted).
 505:      * @param dataset  the dataset (<code>null</code> permitted).
 506:      * @param order  the order that the data is extracted (by row or by column) 
 507:      *               (<code>null</code> not permitted).
 508:      * @param legend  include a legend?
 509:      * @param tooltips  generate tooltips?
 510:      * @param urls  generate URLs?
 511:      *
 512:      * @return A chart.
 513:      */
 514:     public static JFreeChart createMultiplePieChart3D(String title,
 515:                                                       CategoryDataset dataset,
 516:                                                       TableOrder order,
 517:                                                       boolean legend,
 518:                                                       boolean tooltips,
 519:                                                       boolean urls) {
 520: 
 521:         if (order == null) {
 522:             throw new IllegalArgumentException("Null 'order' argument.");
 523:         }
 524:         MultiplePiePlot plot = new MultiplePiePlot(dataset);
 525:         plot.setDataExtractOrder(order);
 526:         plot.setBackgroundPaint(null);
 527:         plot.setOutlineStroke(null);
 528: 
 529:         JFreeChart pieChart = new JFreeChart(new PiePlot3D(null));
 530:         TextTitle seriesTitle = new TextTitle("Series Title", 
 531:                 new Font("SansSerif", Font.BOLD, 12));
 532:         seriesTitle.setPosition(RectangleEdge.BOTTOM);
 533:         pieChart.setTitle(seriesTitle);
 534:         pieChart.removeLegend();
 535:         pieChart.setBackgroundPaint(null);
 536:         plot.setPieChart(pieChart);
 537: 
 538:         if (tooltips) {
 539:             PieToolTipGenerator tooltipGenerator 
 540:                 = new StandardPieToolTipGenerator();
 541:             PiePlot pp = (PiePlot) plot.getPieChart().getPlot();
 542:             pp.setToolTipGenerator(tooltipGenerator);
 543:         }
 544: 
 545:         if (urls) {
 546:             PieURLGenerator urlGenerator = new StandardPieURLGenerator();
 547:             PiePlot pp = (PiePlot) plot.getPieChart().getPlot();
 548:             pp.setURLGenerator(urlGenerator);
 549:         }
 550: 
 551:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
 552:                 plot, legend);
 553: 
 554:         return chart;
 555: 
 556:     }
 557: 
 558:     /**
 559:      * Creates a bar chart.  The chart object returned by this method uses a 
 560:      * {@link CategoryPlot} instance as the plot, with a {@link CategoryAxis} 
 561:      * for the domain axis, a {@link NumberAxis} as the range axis, and a 
 562:      * {@link BarRenderer} as the renderer.
 563:      *
 564:      * @param title  the chart title (<code>null</code> permitted).
 565:      * @param categoryAxisLabel  the label for the category axis 
 566:      *                           (<code>null</code> permitted).
 567:      * @param valueAxisLabel  the label for the value axis 
 568:      *                        (<code>null</code> permitted).
 569:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 570:      * @param orientation  the plot orientation (horizontal or vertical) 
 571:      *                     (<code>null</code> not permitted).
 572:      * @param legend  a flag specifying whether or not a legend is required.
 573:      * @param tooltips  configure chart to generate tool tips?
 574:      * @param urls  configure chart to generate URLs?
 575:      *
 576:      * @return A bar chart.
 577:      */
 578:     public static JFreeChart createBarChart(String title,
 579:                                             String categoryAxisLabel,
 580:                                             String valueAxisLabel,
 581:                                             CategoryDataset dataset,
 582:                                             PlotOrientation orientation,
 583:                                             boolean legend,
 584:                                             boolean tooltips,
 585:                                             boolean urls) {
 586: 
 587:         if (orientation == null) {
 588:             throw new IllegalArgumentException("Null 'orientation' argument.");
 589:         }
 590:         CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);
 591:         ValueAxis valueAxis = new NumberAxis(valueAxisLabel);
 592: 
 593:         BarRenderer renderer = new BarRenderer();
 594:         if (orientation == PlotOrientation.HORIZONTAL) {
 595:             ItemLabelPosition position1 = new ItemLabelPosition(
 596:                     ItemLabelAnchor.OUTSIDE3, TextAnchor.CENTER_LEFT);
 597:             renderer.setPositiveItemLabelPosition(position1);
 598:             ItemLabelPosition position2 = new ItemLabelPosition(
 599:                     ItemLabelAnchor.OUTSIDE9, TextAnchor.CENTER_RIGHT);
 600:             renderer.setNegativeItemLabelPosition(position2);
 601:          }
 602:         else if (orientation == PlotOrientation.VERTICAL) {
 603:             ItemLabelPosition position1 = new ItemLabelPosition(
 604:                     ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER);
 605:             renderer.setPositiveItemLabelPosition(position1);
 606:             ItemLabelPosition position2 = new ItemLabelPosition(
 607:                     ItemLabelAnchor.OUTSIDE6, TextAnchor.TOP_CENTER);
 608:             renderer.setNegativeItemLabelPosition(position2);
 609:         }
 610:         if (tooltips) {
 611:             renderer.setBaseToolTipGenerator(
 612:                     new StandardCategoryToolTipGenerator());
 613:         }
 614:         if (urls) {
 615:             renderer.setBaseItemURLGenerator(
 616:                     new StandardCategoryURLGenerator());
 617:         }
 618: 
 619:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
 620:                 renderer);
 621:         plot.setOrientation(orientation);
 622:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
 623:                 plot, legend);
 624: 
 625:         return chart;
 626: 
 627:     }
 628: 
 629:     /**
 630:      * Creates a stacked bar chart with default settings.  The chart object 
 631:      * returned by this method uses a {@link CategoryPlot} instance as the
 632:      * plot, with a {@link CategoryAxis} for the domain axis, a 
 633:      * {@link NumberAxis} as the range axis, and a {@link StackedBarRenderer} 
 634:      * as the renderer.
 635:      *
 636:      * @param title  the chart title (<code>null</code> permitted).
 637:      * @param domainAxisLabel  the label for the category axis 
 638:      *                         (<code>null</code> permitted).
 639:      * @param rangeAxisLabel  the label for the value axis 
 640:      *                        (<code>null</code> permitted).
 641:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 642:      * @param orientation  the orientation of the chart (horizontal or 
 643:      *                     vertical) (<code>null</code> not permitted).
 644:      * @param legend  a flag specifying whether or not a legend is required.
 645:      * @param tooltips  configure chart to generate tool tips?
 646:      * @param urls  configure chart to generate URLs?
 647:      *
 648:      * @return A stacked bar chart.
 649:      */
 650:     public static JFreeChart createStackedBarChart(String title,
 651:                                                    String domainAxisLabel,
 652:                                                    String rangeAxisLabel,
 653:                                                    CategoryDataset dataset,
 654:                                                    PlotOrientation orientation,
 655:                                                    boolean legend,
 656:                                                    boolean tooltips,
 657:                                                    boolean urls) {
 658: 
 659:         if (orientation == null) {
 660:             throw new IllegalArgumentException("Null 'orientation' argument.");
 661:         }
 662: 
 663:         CategoryAxis categoryAxis = new CategoryAxis(domainAxisLabel);
 664:         ValueAxis valueAxis = new NumberAxis(rangeAxisLabel);
 665: 
 666:         StackedBarRenderer renderer = new StackedBarRenderer();
 667:         if (tooltips) {
 668:             renderer.setBaseToolTipGenerator(
 669:                     new StandardCategoryToolTipGenerator());
 670:         }
 671:         if (urls) {
 672:             renderer.setBaseItemURLGenerator(
 673:                     new StandardCategoryURLGenerator());
 674:         }
 675: 
 676:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
 677:                 renderer);
 678:         plot.setOrientation(orientation);
 679:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
 680:                 plot, legend);
 681: 
 682:         return chart;
 683: 
 684:     }
 685: 
 686:     /**
 687:      * Creates a bar chart with a 3D effect. The chart object returned by this 
 688:      * method uses a {@link CategoryPlot} instance as the plot, with a 
 689:      * {@link CategoryAxis3D} for the domain axis, a {@link NumberAxis3D} as 
 690:      * the range axis, and a {@link BarRenderer3D} as the renderer.
 691:      *
 692:      * @param title  the chart title (<code>null</code> permitted).
 693:      * @param categoryAxisLabel  the label for the category axis 
 694:      *                           (<code>null</code> permitted).
 695:      * @param valueAxisLabel  the label for the value axis (<code>null</code> 
 696:      *                        permitted).
 697:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 698:      * @param orientation  the plot orientation (horizontal or vertical) 
 699:      *                     (<code>null</code> not permitted).
 700:      * @param legend  a flag specifying whether or not a legend is required.
 701:      * @param tooltips  configure chart to generate tool tips?
 702:      * @param urls  configure chart to generate URLs?
 703:      *
 704:      * @return A bar chart with a 3D effect.
 705:      */
 706:     public static JFreeChart createBarChart3D(String title,
 707:                                               String categoryAxisLabel,
 708:                                               String valueAxisLabel,
 709:                                               CategoryDataset dataset,
 710:                                               PlotOrientation orientation,
 711:                                               boolean legend,
 712:                                               boolean tooltips,
 713:                                               boolean urls) {
 714: 
 715:         if (orientation == null) {
 716:             throw new IllegalArgumentException("Null 'orientation' argument.");
 717:         }
 718:         CategoryAxis categoryAxis = new CategoryAxis3D(categoryAxisLabel);
 719:         ValueAxis valueAxis = new NumberAxis3D(valueAxisLabel);
 720: 
 721:         BarRenderer3D renderer = new BarRenderer3D();
 722:         if (tooltips) {
 723:             renderer.setBaseToolTipGenerator(
 724:                     new StandardCategoryToolTipGenerator());
 725:         }
 726:         if (urls) {
 727:             renderer.setBaseItemURLGenerator(
 728:                     new StandardCategoryURLGenerator());
 729:         }
 730: 
 731:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
 732:                 renderer);
 733:         plot.setOrientation(orientation);
 734:         if (orientation == PlotOrientation.HORIZONTAL) {
 735:             // change rendering order to ensure that bar overlapping is the 
 736:             // right way around
 737:             plot.setRowRenderingOrder(SortOrder.DESCENDING);
 738:             plot.setColumnRenderingOrder(SortOrder.DESCENDING);
 739:         }
 740:         plot.setForegroundAlpha(0.75f);
 741: 
 742:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
 743:                 plot, legend);
 744: 
 745:         return chart;
 746: 
 747:     }
 748: 
 749:     /**
 750:      * Creates a stacked bar chart with a 3D effect and default settings. The 
 751:      * chart object returned by this method uses a {@link CategoryPlot} 
 752:      * instance as the plot, with a {@link CategoryAxis3D} for the domain axis, 
 753:      * a {@link NumberAxis3D} as the range axis, and a 
 754:      * {@link StackedBarRenderer3D} as the renderer.
 755:      *
 756:      * @param title  the chart title (<code>null</code> permitted).
 757:      * @param categoryAxisLabel  the label for the category axis 
 758:      *                           (<code>null</code> permitted).
 759:      * @param valueAxisLabel  the label for the value axis (<code>null</code> 
 760:      *                        permitted).
 761:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 762:      * @param orientation  the orientation (horizontal or vertical) 
 763:      *                     (<code>null</code> not permitted).
 764:      * @param legend  a flag specifying whether or not a legend is required.
 765:      * @param tooltips  configure chart to generate tool tips?
 766:      * @param urls  configure chart to generate URLs?
 767:      *
 768:      * @return A stacked bar chart with a 3D effect.
 769:      */
 770:     public static JFreeChart createStackedBarChart3D(String title,
 771:                                                     String categoryAxisLabel,
 772:                                                     String valueAxisLabel,
 773:                                                     CategoryDataset dataset,
 774:                                                     PlotOrientation orientation,
 775:                                                     boolean legend,
 776:                                                     boolean tooltips,
 777:                                                     boolean urls) {
 778: 
 779:         if (orientation == null) {
 780:             throw new IllegalArgumentException("Null 'orientation' argument.");
 781:         }
 782:         CategoryAxis categoryAxis = new CategoryAxis3D(categoryAxisLabel);
 783:         ValueAxis valueAxis = new NumberAxis3D(valueAxisLabel);
 784: 
 785:         // create the renderer...
 786:         CategoryItemRenderer renderer = new StackedBarRenderer3D();
 787:         if (tooltips) {
 788:             renderer.setBaseToolTipGenerator(
 789:                     new StandardCategoryToolTipGenerator());
 790:         }
 791:         if (urls) {
 792:             renderer.setBaseItemURLGenerator(
 793:                     new StandardCategoryURLGenerator());
 794:         }
 795: 
 796:         // create the plot...
 797:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
 798:                 renderer);
 799:         plot.setOrientation(orientation);
 800:         if (orientation == PlotOrientation.HORIZONTAL) {
 801:             // change rendering order to ensure that bar overlapping is the 
 802:             // right way around
 803:             plot.setColumnRenderingOrder(SortOrder.DESCENDING);
 804:         }
 805: 
 806:         // create the chart...
 807:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, 
 808:                 plot, legend);
 809: 
 810:         return chart;
 811: 
 812:     }
 813: 
 814:     /**
 815:      * Creates an area chart with default settings.  The chart object returned
 816:      * by this method uses a {@link CategoryPlot} instance as the plot, with a 
 817:      * {@link CategoryAxis} for the domain axis, a {@link NumberAxis} as the
 818:      * range axis, and an {@link AreaRenderer} as the renderer.
 819:      *
 820:      * @param title  the chart title (<code>null</code> permitted).
 821:      * @param categoryAxisLabel  the label for the category axis 
 822:      *                           (<code>null</code> permitted).
 823:      * @param valueAxisLabel  the label for the value axis (<code>null</code> 
 824:      *                        permitted).
 825:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 826:      * @param orientation  the plot orientation (<code>null</code> not 
 827:      *                     permitted).
 828:      * @param legend  a flag specifying whether or not a legend is required.
 829:      * @param tooltips  configure chart to generate tool tips?
 830:      * @param urls  configure chart to generate URLs?
 831:      *
 832:      * @return An area chart.
 833:      */
 834:     public static JFreeChart createAreaChart(String title,
 835:                                              String categoryAxisLabel,
 836:                                              String valueAxisLabel,
 837:                                              CategoryDataset dataset,
 838:                                              PlotOrientation orientation,
 839:                                              boolean legend,
 840:                                              boolean tooltips,
 841:                                              boolean urls) {
 842: 
 843:         if (orientation == null) {
 844:             throw new IllegalArgumentException("Null 'orientation' argument.");
 845:         }
 846:         CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);
 847:         categoryAxis.setCategoryMargin(0.0);
 848: 
 849:         ValueAxis valueAxis = new NumberAxis(valueAxisLabel);
 850: 
 851:         AreaRenderer renderer = new AreaRenderer();
 852:         if (tooltips) {
 853:             renderer.setBaseToolTipGenerator(
 854:                     new StandardCategoryToolTipGenerator());
 855:         }
 856:         if (urls) {
 857:             renderer.setBaseItemURLGenerator(
 858:                     new StandardCategoryURLGenerator());
 859:         }
 860: 
 861:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
 862:                 renderer);
 863:         plot.setOrientation(orientation);
 864:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
 865:                 plot, legend);
 866: 
 867:         return chart;
 868: 
 869:     }
 870: 
 871:     /**
 872:      * Creates a stacked area chart with default settings.  The chart object 
 873:      * returned by this method uses a {@link CategoryPlot} instance as the
 874:      * plot, with a {@link CategoryAxis} for the domain axis, a 
 875:      * {@link NumberAxis} as the range axis, and a {@link StackedAreaRenderer} 
 876:      * as the renderer.
 877:      *
 878:      * @param title  the chart title (<code>null</code> permitted).
 879:      * @param categoryAxisLabel  the label for the category axis 
 880:      *                           (<code>null</code> permitted).
 881:      * @param valueAxisLabel  the label for the value axis (<code>null</code> 
 882:      *                        permitted).
 883:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 884:      * @param orientation  the plot orientation (horizontal or vertical) 
 885:      *                     (<code>null</code> not permitted).
 886:      * @param legend  a flag specifying whether or not a legend is required.
 887:      * @param tooltips  configure chart to generate tool tips?
 888:      * @param urls  configure chart to generate URLs?
 889:      *
 890:      * @return A stacked area chart.
 891:      */
 892:     public static JFreeChart createStackedAreaChart(String title,
 893:                                                     String categoryAxisLabel,
 894:                                                     String valueAxisLabel,
 895:                                                     CategoryDataset dataset,
 896:                                                     PlotOrientation orientation,
 897:                                                     boolean legend,
 898:                                                     boolean tooltips,
 899:                                                     boolean urls) {
 900: 
 901:         if (orientation == null) {
 902:             throw new IllegalArgumentException("Null 'orientation' argument.");
 903:         }
 904:         CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);
 905:         ValueAxis valueAxis = new NumberAxis(valueAxisLabel);
 906: 
 907:         StackedAreaRenderer renderer = new StackedAreaRenderer();
 908:         if (tooltips) {
 909:             renderer.setBaseToolTipGenerator(
 910:                     new StandardCategoryToolTipGenerator());
 911:         }
 912:         if (urls) {
 913:             renderer.setBaseItemURLGenerator(
 914:                     new StandardCategoryURLGenerator());
 915:         }
 916: 
 917:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
 918:                 renderer);
 919:         plot.setOrientation(orientation);
 920:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, 
 921:                 plot, legend);
 922: 
 923:         return chart;
 924: 
 925:     }
 926: 
 927:     /**
 928:      * Creates a line chart with default settings.  The chart object returned 
 929:      * by this method uses a {@link CategoryPlot} instance as the plot, with a 
 930:      * {@link CategoryAxis} for the domain axis, a {@link NumberAxis} as the 
 931:      * range axis, and a {@link LineAndShapeRenderer} as the renderer.
 932:      *
 933:      * @param title  the chart title (<code>null</code> permitted).
 934:      * @param categoryAxisLabel  the label for the category axis 
 935:      *                           (<code>null</code> permitted).
 936:      * @param valueAxisLabel  the label for the value axis (<code>null</code> 
 937:      *                        permitted).
 938:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 939:      * @param orientation  the chart orientation (horizontal or vertical) 
 940:      *                     (<code>null</code> not permitted).
 941:      * @param legend  a flag specifying whether or not a legend is required.
 942:      * @param tooltips  configure chart to generate tool tips?
 943:      * @param urls  configure chart to generate URLs?
 944:      *
 945:      * @return A line chart.
 946:      */
 947:     public static JFreeChart createLineChart(String title,
 948:                                              String categoryAxisLabel,
 949:                                              String valueAxisLabel,
 950:                                              CategoryDataset dataset,
 951:                                              PlotOrientation orientation,
 952:                                              boolean legend,
 953:                                              boolean tooltips,
 954:                                              boolean urls) {
 955: 
 956:         if (orientation == null) {
 957:             throw new IllegalArgumentException("Null 'orientation' argument.");
 958:         }
 959:         CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);
 960:         ValueAxis valueAxis = new NumberAxis(valueAxisLabel);
 961: 
 962:         LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
 963:         if (tooltips) {
 964:             renderer.setBaseToolTipGenerator(
 965:                     new StandardCategoryToolTipGenerator());
 966:         }
 967:         if (urls) {
 968:             renderer.setBaseItemURLGenerator(
 969:                     new StandardCategoryURLGenerator());
 970:         }
 971:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
 972:                 renderer);
 973:         plot.setOrientation(orientation);
 974:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
 975:                 plot, legend);
 976: 
 977:         return chart;
 978: 
 979:     }
 980: 
 981:     /**
 982:      * Creates a line chart with default settings. The chart object returned by 
 983:      * this method uses a {@link CategoryPlot} instance as the plot, with a 
 984:      * {@link CategoryAxis3D} for the domain axis, a {@link NumberAxis3D} as 
 985:      * the range axis, and a {@link LineRenderer3D} as the renderer.
 986:      *
 987:      * @param title  the chart title (<code>null</code> permitted).
 988:      * @param categoryAxisLabel  the label for the category axis 
 989:      *                           (<code>null</code> permitted).
 990:      * @param valueAxisLabel  the label for the value axis (<code>null</code> 
 991:      *                        permitted).
 992:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
 993:      * @param orientation  the chart orientation (horizontal or vertical) 
 994:      *                     (<code>null</code> not permitted).
 995:      * @param legend  a flag specifying whether or not a legend is required.
 996:      * @param tooltips  configure chart to generate tool tips?
 997:      * @param urls  configure chart to generate URLs?
 998:      *
 999:      * @return A line chart.
1000:      */
1001:     public static JFreeChart createLineChart3D(String title,
1002:                                                String categoryAxisLabel,
1003:                                                String valueAxisLabel,
1004:                                                CategoryDataset dataset,
1005:                                                PlotOrientation orientation,
1006:                                                boolean legend,
1007:                                                boolean tooltips,
1008:                                                boolean urls) {
1009: 
1010:         if (orientation == null) {
1011:             throw new IllegalArgumentException("Null 'orientation' argument.");
1012:         }
1013:         CategoryAxis categoryAxis = new CategoryAxis3D(categoryAxisLabel);
1014:         ValueAxis valueAxis = new NumberAxis3D(valueAxisLabel);
1015: 
1016:         LineRenderer3D renderer = new LineRenderer3D();
1017:         if (tooltips) {
1018:             renderer.setBaseToolTipGenerator(
1019:                     new StandardCategoryToolTipGenerator());
1020:         }
1021:         if (urls) {
1022:             renderer.setBaseItemURLGenerator(
1023:                     new StandardCategoryURLGenerator());
1024:         }
1025:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
1026:                 renderer);
1027:         plot.setOrientation(orientation);
1028:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1029:                 plot, legend);
1030: 
1031:         return chart;
1032: 
1033:     }
1034: 
1035:     /**
1036:      * Creates a Gantt chart using the supplied attributes plus default values 
1037:      * where required.  The chart object returned by this method uses a 
1038:      * {@link CategoryPlot} instance as the plot, with a {@link CategoryAxis} 
1039:      * for the domain axis, a {@link DateAxis} as the range axis, and a 
1040:      * {@link GanttRenderer} as the renderer.
1041:      *
1042:      * @param title  the chart title (<code>null</code> permitted).
1043:      * @param categoryAxisLabel  the label for the category axis 
1044:      *                           (<code>null</code> permitted).
1045:      * @param dateAxisLabel  the label for the date axis 
1046:      *                       (<code>null</code> permitted).
1047:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1048:      * @param legend  a flag specifying whether or not a legend is required.
1049:      * @param tooltips  configure chart to generate tool tips?
1050:      * @param urls  configure chart to generate URLs?
1051:      *
1052:      * @return A Gantt chart.
1053:      */
1054:     public static JFreeChart createGanttChart(String title,
1055:                                               String categoryAxisLabel,
1056:                                               String dateAxisLabel,
1057:                                               IntervalCategoryDataset dataset,
1058:                                               boolean legend,
1059:                                               boolean tooltips,
1060:                                               boolean urls) {
1061: 
1062:         CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);
1063:         DateAxis dateAxis = new DateAxis(dateAxisLabel);
1064: 
1065:         CategoryItemRenderer renderer = new GanttRenderer();
1066:         if (tooltips) {
1067:             renderer.setBaseToolTipGenerator(
1068:                     new IntervalCategoryToolTipGenerator(
1069:                     "{3} - {4}", DateFormat.getDateInstance()));
1070:         }
1071:         if (urls) {
1072:             renderer.setBaseItemURLGenerator(
1073:                     new StandardCategoryURLGenerator());
1074:         }
1075: 
1076:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, dateAxis, 
1077:                 renderer);
1078:         plot.setOrientation(PlotOrientation.HORIZONTAL);
1079:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1080:                 plot, legend);
1081: 
1082:         return chart;
1083: 
1084:     }
1085: 
1086:     /**
1087:      * Creates a waterfall chart.  The chart object returned by this method 
1088:      * uses a {@link CategoryPlot} instance as the plot, with a 
1089:      * {@link CategoryAxis} for the domain axis, a {@link NumberAxis} as the
1090:      * range axis, and a {@link WaterfallBarRenderer} as the renderer.
1091:      *
1092:      * @param title  the chart title (<code>null</code> permitted).
1093:      * @param categoryAxisLabel  the label for the category axis 
1094:      *                           (<code>null</code> permitted).
1095:      * @param valueAxisLabel  the label for the value axis (<code>null</code> 
1096:      *                        permitted).
1097:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1098:      * @param orientation  the plot orientation (horizontal or vertical) 
1099:      *                     (<code>null</code> NOT permitted).
1100:      * @param legend  a flag specifying whether or not a legend is required.
1101:      * @param tooltips  configure chart to generate tool tips?
1102:      * @param urls  configure chart to generate URLs?
1103:      *
1104:      * @return A waterfall chart.
1105:      */
1106:     public static JFreeChart createWaterfallChart(String title,
1107:                                                   String categoryAxisLabel,
1108:                                                   String valueAxisLabel,
1109:                                                   CategoryDataset dataset,
1110:                                                   PlotOrientation orientation,
1111:                                                   boolean legend,
1112:                                                   boolean tooltips,
1113:                                                   boolean urls) {
1114: 
1115:         if (orientation == null) {
1116:             throw new IllegalArgumentException("Null 'orientation' argument.");
1117:         }
1118:         CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);
1119:         categoryAxis.setCategoryMargin(0.0);
1120: 
1121:         ValueAxis valueAxis = new NumberAxis(valueAxisLabel);
1122: 
1123:         WaterfallBarRenderer renderer = new WaterfallBarRenderer();
1124:         if (orientation == PlotOrientation.HORIZONTAL) {
1125:             ItemLabelPosition position = new ItemLabelPosition(
1126:                     ItemLabelAnchor.CENTER, TextAnchor.CENTER, 
1127:                     TextAnchor.CENTER, Math.PI / 2.0);
1128:             renderer.setPositiveItemLabelPosition(position);
1129:             renderer.setNegativeItemLabelPosition(position);
1130:          }
1131:         else if (orientation == PlotOrientation.VERTICAL) {
1132:             ItemLabelPosition position = new ItemLabelPosition(
1133:                     ItemLabelAnchor.CENTER, TextAnchor.CENTER, 
1134:                     TextAnchor.CENTER, 0.0);
1135:             renderer.setPositiveItemLabelPosition(position);
1136:             renderer.setNegativeItemLabelPosition(position);
1137:         }
1138:         if (tooltips) {
1139:             StandardCategoryToolTipGenerator generator 
1140:                 = new StandardCategoryToolTipGenerator();
1141:             renderer.setBaseToolTipGenerator(generator);
1142:         }
1143:         if (urls) {
1144:             renderer.setBaseItemURLGenerator(
1145:                     new StandardCategoryURLGenerator());
1146:         }
1147: 
1148:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
1149:                 renderer);
1150:         plot.clearRangeMarkers();
1151:         Marker baseline = new ValueMarker(0.0);
1152:         baseline.setPaint(Color.black);
1153:         plot.addRangeMarker(baseline, Layer.FOREGROUND);
1154:         plot.setOrientation(orientation);
1155:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, 
1156:                 plot, legend);
1157: 
1158:         return chart;
1159: 
1160:     }
1161: 
1162:     /**
1163:      * Creates a polar plot for the specified dataset (x-values interpreted as 
1164:      * angles in degrees).  The chart object returned by this method uses a 
1165:      * {@link PolarPlot} instance as the plot, with a {@link NumberAxis} for 
1166:      * the radial axis.
1167:      *
1168:      * @param title  the chart title (<code>null</code> permitted).
1169:      * @param dataset  the dataset (<code>null</code> permitted).
1170:      * @param legend  legend required?
1171:      * @param tooltips  tooltips required?
1172:      * @param urls  URLs required?
1173:      *
1174:      * @return A chart.
1175:      */
1176:     public static JFreeChart createPolarChart(String title,
1177:                                               XYDataset dataset,
1178:                                               boolean legend,
1179:                                               boolean tooltips,
1180:                                               boolean urls) {
1181: 
1182:         PolarPlot plot = new PolarPlot();
1183:         plot.setDataset(dataset);
1184:         NumberAxis rangeAxis = new NumberAxis();
1185:         rangeAxis.setAxisLineVisible(false);
1186:         rangeAxis.setTickMarksVisible(false);
1187:         rangeAxis.setTickLabelInsets(new RectangleInsets(0.0, 0.0, 0.0, 0.0));
1188:         plot.setAxis(rangeAxis);
1189:         plot.setRenderer(new DefaultPolarItemRenderer());
1190:         JFreeChart chart = new JFreeChart(
1191:                 title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend);
1192:         return chart;
1193: 
1194:     }
1195: 
1196:     /**
1197:      * Creates a scatter plot with default settings.  The chart object 
1198:      * returned by this method uses an {@link XYPlot} instance as the plot, 
1199:      * with a {@link NumberAxis} for the domain axis, a  {@link NumberAxis} 
1200:      * as the range axis, and an {@link XYLineAndShapeRenderer} as the 
1201:      * renderer.
1202:      *
1203:      * @param title  the chart title (<code>null</code> permitted).
1204:      * @param xAxisLabel  a label for the X-axis (<code>null</code> permitted).
1205:      * @param yAxisLabel  a label for the Y-axis (<code>null</code> permitted).
1206:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1207:      * @param orientation  the plot orientation (horizontal or vertical) 
1208:      *                     (<code>null</code> NOT permitted).
1209:      * @param legend  a flag specifying whether or not a legend is required.
1210:      * @param tooltips  configure chart to generate tool tips?
1211:      * @param urls  configure chart to generate URLs?
1212:      *
1213:      * @return A scatter plot.
1214:      */
1215:     public static JFreeChart createScatterPlot(String title, String xAxisLabel,
1216:             String yAxisLabel, XYDataset dataset, PlotOrientation orientation,
1217:             boolean legend, boolean tooltips, boolean urls) {
1218: 
1219:         if (orientation == null) {
1220:             throw new IllegalArgumentException("Null 'orientation' argument.");
1221:         }
1222:         NumberAxis xAxis = new NumberAxis(xAxisLabel);
1223:         xAxis.setAutoRangeIncludesZero(false);
1224:         NumberAxis yAxis = new NumberAxis(yAxisLabel);
1225:         yAxis.setAutoRangeIncludesZero(false);
1226: 
1227:         XYPlot plot = new XYPlot(dataset, xAxis, yAxis, null);
1228: 
1229:         XYToolTipGenerator toolTipGenerator = null;
1230:         if (tooltips) {
1231:             toolTipGenerator = new StandardXYToolTipGenerator();
1232:         }
1233: 
1234:         XYURLGenerator urlGenerator = null;
1235:         if (urls) {
1236:             urlGenerator = new StandardXYURLGenerator();
1237:         }
1238:         XYItemRenderer renderer = new XYLineAndShapeRenderer(false, true);
1239:         renderer.setBaseToolTipGenerator(toolTipGenerator);
1240:         renderer.setURLGenerator(urlGenerator);
1241:         plot.setRenderer(renderer);
1242:         plot.setOrientation(orientation);
1243: 
1244:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1245:                 plot, legend);
1246:         return chart;
1247: 
1248:     }
1249: 
1250:     /**
1251:      * Creates and returns a default instance of an XY bar chart.
1252:      * <P>
1253:      * The chart object returned by this method uses an {@link XYPlot} instance
1254:      * as the plot, with a {@link DateAxis} for the domain axis, a 
1255:      * {@link NumberAxis} as the range axis, and a {@link XYBarRenderer} as the 
1256:      * renderer.
1257:      *
1258:      * @param title  the chart title (<code>null</code> permitted).
1259:      * @param xAxisLabel  a label for the X-axis (<code>null</code> permitted).
1260:      * @param dateAxis  make the domain axis display dates?
1261:      * @param yAxisLabel  a label for the Y-axis (<code>null</code> permitted).
1262:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1263:      * @param orientation  the orientation (horizontal or vertical) 
1264:      *                     (<code>null</code> NOT permitted).
1265:      * @param legend  a flag specifying whether or not a legend is required.
1266:      * @param tooltips  configure chart to generate tool tips?
1267:      * @param urls  configure chart to generate URLs?
1268:      *
1269:      * @return An XY bar chart.
1270:      */
1271:     public static JFreeChart createXYBarChart(String title,
1272:                                               String xAxisLabel,
1273:                                               boolean dateAxis,
1274:                                               String yAxisLabel,
1275:                                               IntervalXYDataset dataset,
1276:                                               PlotOrientation orientation,
1277:                                               boolean legend,
1278:                                               boolean tooltips,
1279:                                               boolean urls) {
1280: 
1281:         if (orientation == null) {
1282:             throw new IllegalArgumentException("Null 'orientation' argument.");
1283:         }
1284:         ValueAxis domainAxis = null;
1285:         if (dateAxis) {
1286:             domainAxis = new DateAxis(xAxisLabel);
1287:         }
1288:         else {
1289:             NumberAxis axis = new NumberAxis(xAxisLabel);
1290:             axis.setAutoRangeIncludesZero(false);
1291:             domainAxis = axis;
1292:         }
1293:         ValueAxis valueAxis = new NumberAxis(yAxisLabel);
1294: 
1295:         XYBarRenderer renderer = new XYBarRenderer();
1296:         if (tooltips) {
1297:             XYToolTipGenerator tt;
1298:             if (dateAxis) {
1299:                 tt = StandardXYToolTipGenerator.getTimeSeriesInstance();
1300:             }
1301:             else {
1302:                 tt = new StandardXYToolTipGenerator();
1303:             }
1304:             renderer.setBaseToolTipGenerator(tt);
1305:         }
1306:         if (urls) {
1307:             renderer.setURLGenerator(new StandardXYURLGenerator());
1308:         }
1309: 
1310:         XYPlot plot = new XYPlot(dataset, domainAxis, valueAxis, renderer);
1311:         plot.setOrientation(orientation);
1312: 
1313:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1314:                 plot, legend);
1315: 
1316:         return chart;
1317: 
1318:     }
1319: 
1320:     /**
1321:      * Creates an area chart using an {@link XYDataset}.
1322:      * <P>
1323:      * The chart object returned by this method uses an {@link XYPlot} instance 
1324:      * as the plot, with a {@link NumberAxis} for the domain axis, a 
1325:      * {@link NumberAxis} as the range axis, and a {@link XYAreaRenderer} as 
1326:      * the renderer.
1327:      *
1328:      * @param title  the chart title (<code>null</code> permitted).
1329:      * @param xAxisLabel  a label for the X-axis (<code>null</code> permitted).
1330:      * @param yAxisLabel  a label for the Y-axis (<code>null</code> permitted).
1331:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1332:      * @param orientation  the plot orientation (horizontal or vertical) 
1333:      *                     (<code>null</code> NOT permitted).
1334:      * @param legend  a flag specifying whether or not a legend is required.
1335:      * @param tooltips  configure chart to generate tool tips?
1336:      * @param urls  configure chart to generate URLs?
1337:      *
1338:      * @return An XY area chart.
1339:      */
1340:     public static JFreeChart createXYAreaChart(String title,
1341:                                                String xAxisLabel,
1342:                                                String yAxisLabel,
1343:                                                XYDataset dataset,
1344:                                                PlotOrientation orientation,
1345:                                                boolean legend,
1346:                                                boolean tooltips,
1347:                                                boolean urls) {
1348: 
1349:         if (orientation == null) {
1350:             throw new IllegalArgumentException("Null 'orientation' argument.");
1351:         }
1352:         NumberAxis xAxis = new NumberAxis(xAxisLabel);
1353:         xAxis.setAutoRangeIncludesZero(false);
1354:         NumberAxis yAxis = new NumberAxis(yAxisLabel);
1355:         XYPlot plot = new XYPlot(dataset, xAxis, yAxis, null);
1356:         plot.setOrientation(orientation);
1357:         plot.setForegroundAlpha(0.5f);
1358: 
1359:         XYToolTipGenerator tipGenerator = null;
1360:         if (tooltips) {
1361:             tipGenerator = new StandardXYToolTipGenerator();
1362:         }
1363: 
1364:         XYURLGenerator urlGenerator = null;
1365:         if (urls) {
1366:             urlGenerator = new StandardXYURLGenerator();
1367:         }
1368: 
1369:         plot.setRenderer(
1370:             new XYAreaRenderer(XYAreaRenderer.AREA, tipGenerator, urlGenerator)
1371:         );
1372:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1373:                 plot, legend);
1374: 
1375:         return chart;
1376: 
1377:     }
1378: 
1379:     /**
1380:      * Creates a stacked XY area plot.  The chart object returned by this 
1381:      * method uses an {@link XYPlot} instance as the plot, with a 
1382:      * {@link NumberAxis} for the domain axis, a {@link NumberAxis} as the
1383:      * range axis, and a {@link StackedXYAreaRenderer2} as the renderer.
1384:      *
1385:      * @param title  the chart title (<code>null</code> permitted).
1386:      * @param xAxisLabel  a label for the X-axis (<code>null</code> permitted).
1387:      * @param yAxisLabel  a label for the Y-axis (<code>null</code> permitted).
1388:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1389:      * @param orientation  the plot orientation (horizontal or vertical) 
1390:      *                     (<code>null</code> NOT permitted).
1391:      * @param legend  a flag specifying whether or not a legend is required.
1392:      * @param tooltips  configure chart to generate tool tips?
1393:      * @param urls  configure chart to generate URLs?
1394:      *
1395:      * @return A stacked XY area chart.
1396:      */
1397:     public static JFreeChart createStackedXYAreaChart(String title,
1398:                                                     String xAxisLabel,
1399:                                                     String yAxisLabel,
1400:                                                     TableXYDataset dataset,
1401:                                                     PlotOrientation orientation,
1402:                                                     boolean legend,
1403:                                                     boolean tooltips,
1404:                                                     boolean urls) {
1405: 
1406:         if (orientation == null) {
1407:             throw new IllegalArgumentException("Null 'orientation' argument.");
1408:         }
1409:         NumberAxis xAxis = new NumberAxis(xAxisLabel);
1410:         xAxis.setAutoRangeIncludesZero(false);
1411:         xAxis.setLowerMargin(0.0);
1412:         xAxis.setUpperMargin(0.0);
1413:         NumberAxis yAxis = new NumberAxis(yAxisLabel);
1414:         XYToolTipGenerator toolTipGenerator = null;
1415:         if (tooltips) {
1416:             toolTipGenerator = new StandardXYToolTipGenerator();
1417:         }
1418: 
1419:         XYURLGenerator urlGenerator = null;
1420:         if (urls) {
1421:             urlGenerator = new StandardXYURLGenerator();
1422:         }
1423:         StackedXYAreaRenderer2 renderer = new StackedXYAreaRenderer2(
1424:                 toolTipGenerator, urlGenerator);
1425:         renderer.setOutline(true);
1426:         XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer);
1427:         plot.setOrientation(orientation);
1428: 
1429:         plot.setRangeAxis(yAxis);  // forces recalculation of the axis range
1430: 
1431:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1432:                 plot, legend);
1433:         return chart;
1434: 
1435:     }
1436: 
1437:     /**
1438:      * Creates a line chart (based on an {@link XYDataset}) with default 
1439:      * settings.
1440:      *
1441:      * @param title  the chart title (<code>null</code> permitted).
1442:      * @param xAxisLabel  a label for the X-axis (<code>null</code> permitted).
1443:      * @param yAxisLabel  a label for the Y-axis (<code>null</code> permitted).
1444:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1445:      * @param orientation  the plot orientation (horizontal or vertical) 
1446:      *                     (<code>null</code> NOT permitted).
1447:      * @param legend  a flag specifying whether or not a legend is required.
1448:      * @param tooltips  configure chart to generate tool tips?
1449:      * @param urls  configure chart to generate URLs?
1450:      *
1451:      * @return The chart.
1452:      */
1453:     public static JFreeChart createXYLineChart(String title,
1454:                                                String xAxisLabel,
1455:                                                String yAxisLabel,
1456:                                                XYDataset dataset,
1457:                                                PlotOrientation orientation,
1458:                                                boolean legend,
1459:                                                boolean tooltips,
1460:                                                boolean urls) {
1461: 
1462:         if (orientation == null) {
1463:             throw new IllegalArgumentException("Null 'orientation' argument.");
1464:         }
1465:         NumberAxis xAxis = new NumberAxis(xAxisLabel);
1466:         xAxis.setAutoRangeIncludesZero(false);
1467:         NumberAxis yAxis = new NumberAxis(yAxisLabel);
1468:         XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);
1469:         XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer);
1470:         plot.setOrientation(orientation);
1471:         if (tooltips) {
1472:             renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator());
1473:         }
1474:         if (urls) {
1475:             renderer.setURLGenerator(new StandardXYURLGenerator());
1476:         }
1477: 
1478:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1479:                 plot, legend);
1480: 
1481:         return chart;
1482: 
1483:     }
1484: 
1485:     /**
1486:      * Creates a stepped XY plot with default settings.
1487:      *
1488:      * @param title  the chart title (<code>null</code> permitted).
1489:      * @param xAxisLabel  a label for the X-axis (<code>null</code> permitted).
1490:      * @param yAxisLabel  a label for the Y-axis (<code>null</code> permitted).
1491:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1492:      * @param orientation  the plot orientation (horizontal or vertical) 
1493:      *                     (<code>null</code> NOT permitted).
1494:      * @param legend  a flag specifying whether or not a legend is required.
1495:      * @param tooltips  configure chart to generate tool tips?
1496:      * @param urls  configure chart to generate URLs?
1497:      *
1498:      * @return A chart.
1499:      */
1500:     public static JFreeChart createXYStepChart(String title,
1501:                                                String xAxisLabel,
1502:                                                String yAxisLabel,
1503:                                                XYDataset dataset,
1504:                                                PlotOrientation orientation,
1505:                                                boolean legend,
1506:                                                boolean tooltips,
1507:                                                boolean urls) {
1508: 
1509:         if (orientation == null) {
1510:             throw new IllegalArgumentException("Null 'orientation' argument.");
1511:         }
1512:         DateAxis xAxis = new DateAxis(xAxisLabel);
1513:         NumberAxis yAxis = new NumberAxis(yAxisLabel);
1514:         yAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
1515: 
1516:         XYToolTipGenerator toolTipGenerator = null;
1517:         if (tooltips) {
1518:             toolTipGenerator = new StandardXYToolTipGenerator();
1519:         }
1520: 
1521:         XYURLGenerator urlGenerator = null;
1522:         if (urls) {
1523:             urlGenerator = new StandardXYURLGenerator();
1524:         }
1525:         XYItemRenderer renderer 
1526:             = new XYStepRenderer(toolTipGenerator, urlGenerator);
1527: 
1528:         XYPlot plot = new XYPlot(dataset, xAxis, yAxis, null);
1529:         plot.setRenderer(renderer);
1530:         plot.setOrientation(orientation);
1531:         plot.setDomainCrosshairVisible(false);
1532:         plot.setRangeCrosshairVisible(false);
1533:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1534:                 plot, legend);
1535:         return chart;
1536: 
1537:     }
1538: 
1539:     /**
1540:      * Creates a filled stepped XY plot with default settings.
1541:      *
1542:      * @param title  the chart title (<code>null</code> permitted).
1543:      * @param xAxisLabel  a label for the X-axis (<code>null</code> permitted).
1544:      * @param yAxisLabel  a label for the Y-axis (<code>null</code> permitted).
1545:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1546:      * @param orientation  the plot orientation (horizontal or vertical) 
1547:      *                     (<code>null</code> NOT permitted).
1548:      * @param legend  a flag specifying whether or not a legend is required.
1549:      * @param tooltips  configure chart to generate tool tips?
1550:      * @param urls  configure chart to generate URLs?
1551:      *
1552:      * @return A chart.
1553:      */
1554:     public static JFreeChart createXYStepAreaChart(String title,
1555:                                                    String xAxisLabel,
1556:                                                    String yAxisLabel,
1557:                                                    XYDataset dataset,
1558:                                                    PlotOrientation orientation,
1559:                                                    boolean legend,
1560:                                                    boolean tooltips,
1561:                                                    boolean urls) {
1562: 
1563:         if (orientation == null) {
1564:             throw new IllegalArgumentException("Null 'orientation' argument.");
1565:         }
1566:         NumberAxis xAxis = new NumberAxis(xAxisLabel);
1567:         xAxis.setAutoRangeIncludesZero(false);
1568:         NumberAxis yAxis = new NumberAxis(yAxisLabel);
1569: 
1570:         XYToolTipGenerator toolTipGenerator = null;
1571:         if (tooltips) {
1572:             toolTipGenerator = new StandardXYToolTipGenerator();
1573:         }
1574: 
1575:         XYURLGenerator urlGenerator = null;
1576:         if (urls) {
1577:             urlGenerator = new StandardXYURLGenerator();
1578:         }
1579:         XYItemRenderer renderer = new XYStepAreaRenderer(
1580:                 XYStepAreaRenderer.AREA_AND_SHAPES, toolTipGenerator, 
1581:                 urlGenerator);
1582: 
1583:         XYPlot plot = new XYPlot(dataset, xAxis, yAxis, null);
1584:         plot.setRenderer(renderer);
1585:         plot.setOrientation(orientation);
1586:         plot.setDomainCrosshairVisible(false);
1587:         plot.setRangeCrosshairVisible(false);
1588:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1589:                 plot, legend);
1590:         return chart;
1591:     }
1592: 
1593:     /**
1594:      * Creates and returns a time series chart.  A time series chart is an 
1595:      * {@link XYPlot} with a {@link DateAxis} for the x-axis and a 
1596:      * {@link NumberAxis} for the y-axis.  The default renderer is an
1597:      * {@link XYLineAndShapeRenderer}.
1598:      * <P>
1599:      * A convenient dataset to use with this chart is a 
1600:      * {@link org.jfree.data.time.TimeSeriesCollection}.
1601:      *
1602:      * @param title  the chart title (<code>null</code> permitted).
1603:      * @param timeAxisLabel  a label for the time axis (<code>null</code> 
1604:      *                       permitted).
1605:      * @param valueAxisLabel  a label for the value axis (<code>null</code> 
1606:      *                        permitted).
1607:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1608:      * @param legend  a flag specifying whether or not a legend is required.
1609:      * @param tooltips  configure chart to generate tool tips?
1610:      * @param urls  configure chart to generate URLs?
1611:      *
1612:      * @return A time series chart.
1613:      */
1614:     public static JFreeChart createTimeSeriesChart(String title,
1615:                                                    String timeAxisLabel,
1616:                                                    String valueAxisLabel,
1617:                                                    XYDataset dataset,
1618:                                                    boolean legend,
1619:                                                    boolean tooltips,
1620:                                                    boolean urls) {
1621: 
1622:         ValueAxis timeAxis = new DateAxis(timeAxisLabel);
1623:         timeAxis.setLowerMargin(0.02);  // reduce the default margins 
1624:         timeAxis.setUpperMargin(0.02);
1625:         NumberAxis valueAxis = new NumberAxis(valueAxisLabel);
1626:         valueAxis.setAutoRangeIncludesZero(false);  // override default
1627:         XYPlot plot = new XYPlot(dataset, timeAxis, valueAxis, null);
1628: 
1629:         XYToolTipGenerator toolTipGenerator = null;
1630:         if (tooltips) {
1631:             toolTipGenerator 
1632:                 = StandardXYToolTipGenerator.getTimeSeriesInstance();
1633:         }
1634: 
1635:         XYURLGenerator urlGenerator = null;
1636:         if (urls) {
1637:             urlGenerator = new StandardXYURLGenerator();
1638:         }
1639: 
1640:         XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, 
1641:                 false);
1642:         renderer.setBaseToolTipGenerator(toolTipGenerator);
1643:         renderer.setURLGenerator(urlGenerator);
1644:         plot.setRenderer(renderer);
1645:         
1646:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1647:                 plot, legend);
1648:         return chart;
1649: 
1650:     }
1651: 
1652:     /**
1653:      * Creates and returns a default instance of a candlesticks chart.
1654:      *
1655:      * @param title  the chart title (<code>null</code> permitted).
1656:      * @param timeAxisLabel  a label for the time axis (<code>null</code> 
1657:      *                       permitted).
1658:      * @param valueAxisLabel  a label for the value axis (<code>null</code> 
1659:      *                        permitted).
1660:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1661:      * @param legend  a flag specifying whether or not a legend is required.
1662:      *
1663:      * @return A candlestick chart.
1664:      */
1665:     public static JFreeChart createCandlestickChart(String title,
1666:                                                     String timeAxisLabel,
1667:                                                     String valueAxisLabel,
1668:                                                     OHLCDataset dataset,
1669:                                                     boolean legend) {
1670: 
1671:         ValueAxis timeAxis = new DateAxis(timeAxisLabel);
1672:         NumberAxis valueAxis = new NumberAxis(valueAxisLabel);
1673:         XYPlot plot = new XYPlot(dataset, timeAxis, valueAxis, null);
1674:         plot.setRenderer(new CandlestickRenderer());
1675:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1676:                 plot, legend);
1677:         return chart;
1678: 
1679:     }
1680: 
1681:     /**
1682:      * Creates and returns a default instance of a high-low-open-close chart.
1683:      *
1684:      * @param title  the chart title (<code>null</code> permitted).
1685:      * @param timeAxisLabel  a label for the time axis (<code>null</code> 
1686:      *                       permitted).
1687:      * @param valueAxisLabel  a label for the value axis (<code>null</code> 
1688:      *                        permitted).
1689:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1690:      * @param legend  a flag specifying whether or not a legend is required.
1691:      *
1692:      * @return A high-low-open-close chart.
1693:      */
1694:     public static JFreeChart createHighLowChart(String title,
1695:                                                 String timeAxisLabel,
1696:                                                 String valueAxisLabel,
1697:                                                 OHLCDataset dataset,
1698:                                                 boolean legend) {
1699: 
1700:         ValueAxis timeAxis = new DateAxis(timeAxisLabel);
1701:         NumberAxis valueAxis = new NumberAxis(valueAxisLabel);
1702:         HighLowRenderer renderer = new HighLowRenderer();
1703:         renderer.setBaseToolTipGenerator(new HighLowItemLabelGenerator());
1704:         XYPlot plot = new XYPlot(dataset, timeAxis, valueAxis, renderer);
1705:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1706:                 plot, legend);
1707:         return chart;
1708: 
1709:     }
1710: 
1711:     /**
1712:      * Creates and returns a default instance of a high-low-open-close chart 
1713:      * with a special timeline. This timeline can be a 
1714:      * {@link org.jfree.chart.axis.SegmentedTimeline} such as the Monday 
1715:      * through Friday timeline that will remove Saturdays and Sundays from
1716:      * the axis.
1717:      *
1718:      * @param title  the chart title (<code>null</code> permitted).
1719:      * @param timeAxisLabel  a label for the time axis (<code>null</code> 
1720:      *                       permitted).
1721:      * @param valueAxisLabel  a label for the value axis (<code>null</code> 
1722:      *                        permitted).
1723:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1724:      * @param timeline  the timeline.
1725:      * @param legend  a flag specifying whether or not a legend is required.
1726:      *
1727:      * @return A high-low-open-close chart.
1728:      */
1729:     public static JFreeChart createHighLowChart(String title,
1730:                                                 String timeAxisLabel,
1731:                                                 String valueAxisLabel,
1732:                                                 OHLCDataset dataset,
1733:                                                 Timeline timeline,
1734:                                                 boolean legend) {
1735: 
1736:         DateAxis timeAxis = new DateAxis(timeAxisLabel);
1737:         timeAxis.setTimeline(timeline);
1738:         NumberAxis valueAxis = new NumberAxis(valueAxisLabel);
1739:         HighLowRenderer renderer = new HighLowRenderer();
1740:         renderer.setBaseToolTipGenerator(new HighLowItemLabelGenerator());
1741:         XYPlot plot = new XYPlot(dataset, timeAxis, valueAxis, renderer);
1742:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1743:                 plot, legend);
1744:         return chart;
1745: 
1746:     }
1747: 
1748:     /**
1749:      * Creates a bubble chart with default settings.  The chart is composed of
1750:      * an {@link XYPlot}, with a {@link NumberAxis} for the domain axis,
1751:      * a {@link NumberAxis} for the range axis, and an {@link XYBubbleRenderer}
1752:      * to draw the data items.
1753:      *
1754:      * @param title  the chart title (<code>null</code> permitted).
1755:      * @param xAxisLabel  a label for the X-axis (<code>null</code> permitted).
1756:      * @param yAxisLabel  a label for the Y-axis (<code>null</code> permitted).
1757:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1758:      * @param orientation  the orientation (horizontal or vertical) 
1759:      *                     (<code>null</code> NOT permitted).
1760:      * @param legend  a flag specifying whether or not a legend is required.
1761:      * @param tooltips  configure chart to generate tool tips?
1762:      * @param urls  configure chart to generate URLs?
1763:      *
1764:      * @return A bubble chart.
1765:      */
1766:     public static JFreeChart createBubbleChart(String title,
1767:                                                String xAxisLabel,
1768:                                                String yAxisLabel,
1769:                                                XYZDataset dataset,
1770:                                                PlotOrientation orientation,
1771:                                                boolean legend,
1772:                                                boolean tooltips,
1773:                                                boolean urls) {
1774: 
1775:         if (orientation == null) {
1776:             throw new IllegalArgumentException("Null 'orientation' argument.");
1777:         }
1778:         NumberAxis xAxis = new NumberAxis(xAxisLabel);
1779:         xAxis.setAutoRangeIncludesZero(false);
1780:         NumberAxis yAxis = new NumberAxis(yAxisLabel);
1781:         yAxis.setAutoRangeIncludesZero(false);
1782: 
1783:         XYPlot plot = new XYPlot(dataset, xAxis, yAxis, null);
1784: 
1785:         XYItemRenderer renderer = new XYBubbleRenderer(
1786:                 XYBubbleRenderer.SCALE_ON_RANGE_AXIS);
1787:         if (tooltips) {
1788:             renderer.setBaseToolTipGenerator(new StandardXYZToolTipGenerator());
1789:         }
1790:         if (urls) {
1791:             renderer.setURLGenerator(new StandardXYZURLGenerator());
1792:         }
1793:         plot.setRenderer(renderer);
1794:         plot.setOrientation(orientation);
1795: 
1796:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1797:                 plot, legend);
1798: 
1799:         return chart;
1800: 
1801:     }
1802: 
1803:     /**
1804:      * Creates a histogram chart.  This chart is constructed with an 
1805:      * {@link XYPlot} using an {@link XYBarRenderer}.  The domain and range 
1806:      * axes are {@link NumberAxis} instances.
1807:      *
1808:      * @param title  the chart title (<code>null</code> permitted).
1809:      * @param xAxisLabel  the x axis label (<code>null</code> permitted).
1810:      * @param yAxisLabel  the y axis label (<code>null</code> permitted).
1811:      * @param dataset  the dataset (<code>null</code> permitted).
1812:      * @param orientation  the orientation (horizontal or vertical) 
1813:      *                     (<code>null</code> NOT permitted).
1814:      * @param legend  create a legend?
1815:      * @param tooltips  display tooltips?
1816:      * @param urls  generate URLs?
1817:      *
1818:      * @return The chart.
1819:      */
1820:     public static JFreeChart createHistogram(String title,
1821:                                              String xAxisLabel,
1822:                                              String yAxisLabel,
1823:                                              IntervalXYDataset dataset,
1824:                                              PlotOrientation orientation,
1825:                                              boolean legend,
1826:                                              boolean tooltips,
1827:                                              boolean urls) {
1828: 
1829:         if (orientation == null) {
1830:             throw new IllegalArgumentException("Null 'orientation' argument.");
1831:         }
1832:         NumberAxis xAxis = new NumberAxis(xAxisLabel);
1833:         xAxis.setAutoRangeIncludesZero(false);
1834:         ValueAxis yAxis = new NumberAxis(yAxisLabel);
1835: 
1836:         XYItemRenderer renderer = new XYBarRenderer();
1837:         if (tooltips) {
1838:             renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator());
1839:         }
1840:         if (urls) {
1841:             renderer.setURLGenerator(new StandardXYURLGenerator());
1842:         }
1843: 
1844:         XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer);
1845:         plot.setOrientation(orientation);
1846:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1847:                 plot, legend);
1848:         return chart;
1849: 
1850:     }
1851: 
1852:     /**
1853:      * Creates and returns a default instance of a box and whisker chart
1854:      * based on data from a {@link BoxAndWhiskerCategoryDataset}.
1855:      *
1856:      * @param title  the chart title (<code>null</code> permitted).
1857:      * @param categoryAxisLabel  a label for the category axis 
1858:      *     (<code>null</code> permitted).
1859:      * @param valueAxisLabel  a label for the value axis (<code>null</code> 
1860:      *     permitted).
1861:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1862:      * @param legend  a flag specifying whether or not a legend is required.
1863:      *
1864:      * @return A box and whisker chart.
1865:      * 
1866:      * @since 1.0.4
1867:      */
1868:     public static JFreeChart createBoxAndWhiskerChart(String title,
1869:             String categoryAxisLabel, String valueAxisLabel,
1870:             BoxAndWhiskerCategoryDataset dataset, boolean legend) {
1871:         
1872:         CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);
1873:         NumberAxis valueAxis = new NumberAxis(valueAxisLabel);
1874:         valueAxis.setAutoRangeIncludesZero(false);
1875:         
1876:         BoxAndWhiskerRenderer renderer = new BoxAndWhiskerRenderer();
1877:         renderer.setToolTipGenerator(new BoxAndWhiskerToolTipGenerator());
1878:            
1879:         CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, 
1880:                 renderer);
1881:         return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, 
1882:                 legend);
1883:     } 
1884: 
1885:     /**
1886:      * Creates and returns a default instance of a box and whisker chart.
1887:      *
1888:      * @param title  the chart title (<code>null</code> permitted).
1889:      * @param timeAxisLabel  a label for the time axis (<code>null</code> 
1890:      *                       permitted).
1891:      * @param valueAxisLabel  a label for the value axis (<code>null</code> 
1892:      *                        permitted).
1893:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1894:      * @param legend  a flag specifying whether or not a legend is required.
1895:      *
1896:      * @return A box and whisker chart.
1897:      */
1898:     public static JFreeChart createBoxAndWhiskerChart(String title,
1899:                                                  String timeAxisLabel,
1900:                                                  String valueAxisLabel,
1901:                                                  BoxAndWhiskerXYDataset dataset,
1902:                                                  boolean legend) {
1903: 
1904:         ValueAxis timeAxis = new DateAxis(timeAxisLabel);
1905:         NumberAxis valueAxis = new NumberAxis(valueAxisLabel);
1906:         valueAxis.setAutoRangeIncludesZero(false);
1907:         XYBoxAndWhiskerRenderer renderer = new XYBoxAndWhiskerRenderer(10.0);
1908:         XYPlot plot = new XYPlot(dataset, timeAxis, valueAxis, renderer);
1909:         return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, 
1910:                 legend);
1911: 
1912:     }
1913: 
1914:     /**
1915:      * Creates a wind plot with default settings.
1916:      *
1917:      * @param title  the chart title (<code>null</code> permitted).
1918:      * @param xAxisLabel  a label for the x-axis (<code>null</code> permitted).
1919:      * @param yAxisLabel  a label for the y-axis (<code>null</code> permitted).
1920:      * @param dataset  the dataset for the chart (<code>null</code> permitted).
1921:      * @param legend  a flag that controls whether or not a legend is created.
1922:      * @param tooltips  configure chart to generate tool tips?
1923:      * @param urls  configure chart to generate URLs?
1924:      *
1925:      * @return A wind plot.
1926:      *
1927:      */
1928:     public static JFreeChart createWindPlot(String title,
1929:                                             String xAxisLabel,
1930:                                             String yAxisLabel,
1931:                                             WindDataset dataset,
1932:                                             boolean legend,
1933:                                             boolean tooltips,
1934:                                             boolean urls) {
1935: 
1936:         ValueAxis xAxis = new DateAxis(xAxisLabel);
1937:         ValueAxis yAxis = new NumberAxis(yAxisLabel);
1938:         yAxis.setRange(-12.0, 12.0);
1939: 
1940:         WindItemRenderer renderer = new WindItemRenderer();
1941:         if (tooltips) {
1942:             renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator());
1943:         }
1944:         if (urls) {
1945:             renderer.setURLGenerator(new StandardXYURLGenerator());
1946:         }
1947:         XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer);
1948:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1949:                 plot, legend);
1950: 
1951:         return chart;
1952: 
1953:     }
1954: 
1955:     /**
1956:      * Creates a wafer map chart.
1957:      *
1958:      * @param title  the chart title (<code>null</code> permitted).
1959:      * @param dataset  the dataset (<code>null</code> permitted).
1960:      * @param orientation  the plot orientation (horizontal or vertical) 
1961:      *                     (<code>null</code> NOT permitted.
1962:      * @param legend  display a legend?
1963:      * @param tooltips  generate tooltips?
1964:      * @param urls  generate URLs?
1965:      *
1966:      * @return A wafer map chart.
1967:      */
1968:     public static JFreeChart createWaferMapChart(String title,
1969:                                                  WaferMapDataset dataset,
1970:                                                  PlotOrientation orientation,
1971:                                                  boolean legend,
1972:                                                  boolean tooltips,
1973:                                                  boolean urls) {
1974: 
1975:         if (orientation == null) {
1976:             throw new IllegalArgumentException("Null 'orientation' argument.");
1977:         }
1978:         WaferMapPlot plot = new WaferMapPlot(dataset);
1979:         WaferMapRenderer renderer = new WaferMapRenderer();
1980:         plot.setRenderer(renderer);
1981: 
1982:         JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
1983:                 plot, legend);
1984: 
1985:         return chart;
1986:     }
1987: 
1988: }