Java/Chart/XY Step Area Chart — различия между версиями

Материал из Java эксперт
Перейти к: навигация, поиск
 
м (1 версия)
 
(нет различий)

Текущая версия на 09:52, 1 июня 2010

JFreeChart: XY Step Area Chart Demo

   <source lang="java">

/* ===========================================================

* JFreeChart : a free chart library for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2000-2004, by Object Refinery Limited and Contributors.
*
* Project Info:  http://www.jfree.org/jfreechart/index.html
*
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
* in the United States and other countries.]
*
* ------------------------
* XYStepAreaChartDemo.java
* ------------------------
* (C) Copyright 2003, 2004, by Object Refinery Limited and Contributors.
*
* Original Author:  Matthias Rose (for Ablay & Fodi GmbH);
* Contributor(s):   David Gilbert (for Object Refinery Limited);
*
* $Id: XYStepAreaChartDemo.java,v 1.12 2004/04/26 19:12:04 taqua Exp $
*
* Changes
* -------
* 26-Sep-2003 : Copied XYAreaChartDemo --> XYStepAreaChartDemo
*               and adapted to test XYStepAreaRenderer (MR);
*
*/

package org.jfree.chart.demo; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.Plot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYStepAreaRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; /**

* A simple demonstration application showing how to create a step area chart.
*
* @author Matthias Rose
*/

public class XYStepAreaChartDemo extends ApplicationFrame implements ActionListener {

   /** Vertical orientation. */
   private static final String ORIENT_VERT = "Plot vertical";
   
   /** Horizontal orientation. */
   private static final String ORIENT_HORIZ = "Plot horizontal";
   /** Problem data. */
   private static final Object[][] TEST_DATA = {
       // domain values,   range values,    may be null?
       {new Integer(1), new Integer(500), Boolean.TRUE},
       {new Integer(2), new Integer(694)},
       {new Integer(3), new Integer(-734)},
       {new Integer(4), new Integer(453)},
       {new Integer(5), new Integer(500), Boolean.TRUE},
       {new Integer(6), new Integer(200)},
       {new Integer(7), new Integer(550), Boolean.TRUE},
       {new Integer(8), new Integer(-150), Boolean.TRUE},
       {new Integer(9), new Integer(232)},
       {new Integer(10), new Integer(734)},
       {new Integer(11), new Integer(400), Boolean.TRUE},
   };
   /** The chart panel. */
   private ChartPanel chartPanel;
   
   /** The data series. */
   private XYSeries xySeries;
   
   /** The null values checkbox. */
   private JCheckBox nullValuesCheckBox;
   /** The outline checkbox. */
   private JCheckBox outlineCheckBox;
   
   /** The range base text field. */
   private JTextField rangeBaseTextField;
   
   /** The orientation combobox. */
   private JComboBox orientationComboBox;  
   
   /**
    * Creates a new demo.
    *
    * @param title  the frame title.
    */
   public XYStepAreaChartDemo(final String title) {
       super(title);
       this.xySeries = new XYSeries("Some data");
       for (int i = 0; i < TEST_DATA.length; i++) {
           this.xySeries.add((Integer) TEST_DATA[i][0], (Integer) TEST_DATA[i][1]);
       }
       final XYSeriesCollection dataset = new XYSeriesCollection(this.xySeries);
       
       final JFreeChart chart = createChart(dataset);
       
       this.chartPanel = new ChartPanel(chart);
       // allow zooming

// this.chartPanel.setHorizontalZoom(true); // this.chartPanel.setVerticalZoom(true);

       // size
       this.chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
       // make stroke more striking
       final Plot plot = this.chartPanel.getChart().getPlot();
       plot.setOutlineStroke(new BasicStroke(2));
       plot.setOutlinePaint(Color.magenta);
       // add some components to make options changable
       final JPanel main = new JPanel(new BorderLayout());
       final JPanel optionsPanel = new JPanel();
       
       final String[] options = {ORIENT_VERT, ORIENT_HORIZ};
       this.orientationComboBox = new JComboBox(options);
       this.orientationComboBox.addActionListener(this);
       optionsPanel.add(this.orientationComboBox);
       this.outlineCheckBox = new JCheckBox("Outline");
       this.outlineCheckBox.addActionListener(this);
       optionsPanel.add(this.outlineCheckBox);
       optionsPanel.add(new JLabel("Base"));
       this.rangeBaseTextField = new JTextField("0", 5);
       this.rangeBaseTextField.addActionListener(this);
       optionsPanel.add(this.rangeBaseTextField);
       this.nullValuesCheckBox = new JCheckBox("NULL values");
       this.nullValuesCheckBox.addActionListener(this);
       optionsPanel.add(this.nullValuesCheckBox);
       main.add(optionsPanel, BorderLayout.SOUTH);
       main.add(this.chartPanel);
       setContentPane(main);
   }
   // ****************************************************************************
   // * JFREECHART DEVELOPER GUIDE                                               *
   // * The JFreeChart Developer Guide, written by David Gilbert, is available   *
   // * to purchase from Object Refinery Limited:                                *
   // *                                                                          *
   // * http://www.object-refinery.ru/jfreechart/guide.html                     *
   // *                                                                          *
   // * Sales are used to provide funding for the JFreeChart project - please    * 
   // * support us so that we can continue developing free software.             *
   // ****************************************************************************
   
   /**
    * Creates a chart.
    * 
    * @param dataset  the dataset.
    * 
    * @return A chart.
    */
   private JFreeChart createChart(final XYDataset dataset) {
           
       final JFreeChart chart = ChartFactory.createXYStepAreaChart(
           "XY Step Area Chart Demo",
           "Domain (X)", "Range (Y)",
           dataset,
           PlotOrientation.VERTICAL,
           true,  // legend
           true,  // tool tips
           false  // URLs
       );
       
       // color
       final XYPlot plot = chart.getXYPlot();
       plot.getRenderer().setSeriesPaint(0, Color.green);
       // fill shapes      
       final XYStepAreaRenderer rend = (XYStepAreaRenderer) plot.getRenderer();
       rend.setShapesFilled(true);
       return chart;        
   }
   /**
    * Change options according to settings.
    * 
    * @param evt  the event.
    */
   public void actionPerformed(final ActionEvent evt) {
       final Object source = evt.getSource();
       if (source == this.nullValuesCheckBox) {
           
           final boolean withNulls = this.nullValuesCheckBox.isSelected();
           for (int i = 0; i < TEST_DATA.length; i++) {
               Integer yVal = (Integer) TEST_DATA[i][1];
               if (withNulls && TEST_DATA[i].length > 2) {
                   yVal = null;
               }
               this.xySeries.getDataItem(i).setY(yVal);
           }
           
       } 
       else if (source == this.outlineCheckBox) {
           final XYPlot plot = (XYPlot) this.chartPanel.getChart().getPlot();
           ((XYStepAreaRenderer) plot.getRenderer()).setOutline(this.outlineCheckBox.isSelected());
           
       } 
       else if (source == this.rangeBaseTextField) {
           
           final double val = Double.parseDouble(this.rangeBaseTextField.getText());
           final XYPlot plot = (XYPlot) this.chartPanel.getChart().getPlot();
           final XYStepAreaRenderer rend = (XYStepAreaRenderer) plot.getRenderer();
           rend.setRangeBase(val);     
       } 
       else if (source == this.orientationComboBox) {
           final XYPlot plot = (XYPlot) this.chartPanel.getChart().getPlot();
           if (this.orientationComboBox.getSelectedItem() == ORIENT_HORIZ) {
               plot.setOrientation(PlotOrientation.HORIZONTAL);        
           }    
           else if (this.orientationComboBox.getSelectedItem() == ORIENT_VERT) {
               plot.setOrientation(PlotOrientation.VERTICAL);          
           }
       }
       this.chartPanel.repaint();
   }
   /**
    * Starting point for the demonstration application.
    *
    * @param args  ignored.
    */
   public static void main(final String[] args) {
       final XYStepAreaChartDemo demo = new XYStepAreaChartDemo("Step Area XY Chart Demo");
       demo.pack();
       RefineryUtilities.centerFrameOnScreen(demo);
       demo.setVisible(true);
   }

}


      </source>
   
  
 
  



JFreeChart: XY Step Chart Demo

   <source lang="java">

/* ===========================================================

* JFreeChart : a free chart library for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2000-2004, by Object Refinery Limited and Contributors.
*
* Project Info:  http://www.jfree.org/jfreechart/index.html
*
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
* in the United States and other countries.]
*
* --------------------
* XYStepChartDemo.java
* --------------------
* (C) Copyright 2002-2004, by Roger Studner and Contributors.
*
* Original Author:  Roger Studner;
* Contributor(s):   David Gilbert (for Object Refinery Limited);
*
* $Id: XYStepChartDemo.java,v 1.13 2004/04/26 19:40:15 taqua Exp $
*
* Changes
* -------
* 13-May-2002 : Version 1, contributed by Roger Studner (DG);
* 11-Oct-2002 : Moved create method to ChartFactory class, and fixed issues reported by
*               Checkstyle (DG);
*
*/

package org.jfree.chart.demo; import java.awt.BasicStroke; import java.awt.Color; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.date.DateUtilities; import org.jfree.ui.RefineryUtilities; /**

* A demonstration of the {@link org.jfree.chart.renderer.XYStepRenderer} class.
*
* @author Roger Studner
*/

public class XYStepChartDemo {

   /** A frame for displaying the chart. */
   private ChartFrame frame = null;
   /**
    * Displays a sample chart in its own frame.
    */
   private void displayChart() {
       if (this.frame == null) {
           // create a default chart based on some sample data...
           final String title = "LCACs in use at given time";
           final String xAxisLabel = "Time";
           final String yAxisLabel = "Number of Transports";
           final XYDataset data = createStepXYDataset();
           final JFreeChart chart = ChartFactory.createXYStepChart(
               title,
               xAxisLabel, yAxisLabel,
               data,
               PlotOrientation.VERTICAL,
               true,   // legend
               true,   // tooltips
               false   // urls
           );
           // then customise it a little...
           chart.setBackgroundPaint(new Color(216, 216, 216));
           final XYPlot plot = chart.getXYPlot();
           plot.getRenderer().setSeriesStroke(0, new BasicStroke(2.0f));
           plot.getRenderer().setSeriesStroke(1, new BasicStroke(2.0f));
           
           // and present it in a frame...
           this.frame = new ChartFrame("Plan Comparison", chart);
           this.frame.pack();
           RefineryUtilities.positionFrameRandomly(this.frame);
           this.frame.setVisible(true);
       }
       else {
           this.frame.setVisible(true);
           this.frame.requestFocus();
       }
   }
   /**
    * Creates and returns a sample dataset for the XY "Step" chart.
    *
    * @return the sample dataset.
    */
   public static XYDataset createStepXYDataset() {
       final int feb = 2;
       final XYSeries s1 = new XYSeries("Plan 1", false, true);
       s1.add(DateUtilities.createDate(2002, feb, 19, 8, 0).getTime(), 0);
       s1.add(DateUtilities.createDate(2002, feb, 19, 8, 1).getTime(), 2);
       s1.add(DateUtilities.createDate(2002, feb, 19, 9, 5).getTime(), 4);
       s1.add(DateUtilities.createDate(2002, feb, 19, 10, 6).getTime(), 4);
       s1.add(DateUtilities.createDate(2002, feb, 19, 11, 6).getTime(), 5);
       s1.add(DateUtilities.createDate(2002, feb, 19, 12, 6).getTime(), 3);
       s1.add(DateUtilities.createDate(2002, feb, 19, 13, 6).getTime(), 6);
       s1.add(DateUtilities.createDate(2002, feb, 19, 14, 6).getTime(), 6);
       s1.add(DateUtilities.createDate(2002, feb, 19, 15, 30).getTime(), 2);
       s1.add(DateUtilities.createDate(2002, feb, 19, 16, 7).getTime(), 0);
       final XYSeries s2 = new XYSeries("Plan 2");
       s2.add(DateUtilities.createDate(2002, feb, 19, 8, 40).getTime(), 0);
       s2.add(DateUtilities.createDate(2002, feb, 19, 8, 45).getTime(), 1);
       s2.add(DateUtilities.createDate(2002, feb, 19, 9, 0).getTime(), 6);
       s2.add(DateUtilities.createDate(2002, feb, 19, 10, 6).getTime(), 2);
       s2.add(DateUtilities.createDate(2002, feb, 19, 10, 45).getTime(), 4);
       s2.add(DateUtilities.createDate(2002, feb, 19, 12, 0).getTime(), 7);
       s2.add(DateUtilities.createDate(2002, feb, 19, 13, 0).getTime(), 5);
       s2.add(DateUtilities.createDate(2002, feb, 19, 14, 6).getTime(), 4);
       s2.add(DateUtilities.createDate(2002, feb, 19, 15, 15).getTime(), 4);
       s2.add(DateUtilities.createDate(2002, feb, 19, 16, 0).getTime(), 0);
       final XYSeriesCollection dataset = new XYSeriesCollection();
       dataset.addSeries(s1);
       dataset.addSeries(s2);
       return dataset;
   }
   // ****************************************************************************
   // * JFREECHART DEVELOPER GUIDE                                               *
   // * The JFreeChart Developer Guide, written by David Gilbert, is available   *
   // * to purchase from Object Refinery Limited:                                *
   // *                                                                          *
   // * http://www.object-refinery.ru/jfreechart/guide.html                     *
   // *                                                                          *
   // * Sales are used to provide funding for the JFreeChart project - please    * 
   // * support us so that we can continue developing free software.             *
   // ****************************************************************************
   
   /**
    * The starting point for the demonstration application.
    *
    * @param args  ignored.
    */
   public static void main(final String[] args) {
       final XYStepChartDemo demo = new XYStepChartDemo();
       demo.displayChart();
   }

}

      </source>