Package org.encog.workbench.tabs.training

Source Code of org.encog.workbench.tabs.training.ChartPane

/*
* Encog(tm) Workbench v3.0
* http://www.heatonresearch.com/encog/
* http://code.google.com/p/encog-java/
* Copyright 2008-2011 Heaton Research, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*  
* For more information on Heaton Research copyrights, licenses
* and trademarks visit:
* http://www.heatonresearch.com/copyright
*/
package org.encog.workbench.tabs.training;

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
* Simple pane that holds the chart of training.  This uses JFreeChart
* @author jheaton
*
*/
public class ChartPane extends JPanel {

  /**
   * The serial id.
   */
  private static final long serialVersionUID = 1L;
 
  /**
   * Series 1 holds the current error.
   */
  XYSeries series1;
 
  /**
   * Series 2 holds the error improvement.
   */
  XYSeries series2;
 
  /**
   * The data set for the current error.
   */
  XYSeriesCollection dataset1;
 
  /**
   * The
   */
  XYSeriesCollection dataset2;
 
  /**
   * The chart.
   */
  JFreeChart chart;
 
  /**
   * The panel that the chart is drawn upon.
   */
  ChartPanel chartPanel;
 
  /**
   * How many data points have been displayed.
   */
  int count;

  /**
   * Construct the pane.
   */
  public ChartPane() {
    this.series1 = new XYSeries("Current Error");
    this.dataset1 = new XYSeriesCollection();
    this.dataset1.addSeries(this.series1);
    this.series1.setMaximumItemCount(50);

    this.series2 = new XYSeries("Error Improvement");
    this.dataset2 = new XYSeriesCollection();
    this.dataset2.addSeries(this.series2);
    this.series2.setMaximumItemCount(50);

    // addData(1,1,0.01);

    final JFreeChart chart = createChart();
    this.chartPanel = new ChartPanel(chart);
    this.chartPanel.setPreferredSize(new java.awt.Dimension(600, 270));
    this.chartPanel.setDomainZoomable(true);
    this.chartPanel.setRangeZoomable(true);
    setLayout(new BorderLayout());
    add(this.chartPanel, BorderLayout.CENTER);

  }

  /**
   * Add a data point to the chart.
   * @param iteration Which iteration is this.
   * @param error What is the error at this point.
   * @param improvement What is the error improvement from the last
   * iteration.
   */
  public void addData(final int iteration, final double error,
      final double improvement) {
    if (iteration > 10) {
      this.series1.add(iteration, error * 100.0);
      this.series2.add(iteration, improvement * 100.0);
    }

  }

  /**
   * Create the initial chart.
   * @return The chart.
   */
  private JFreeChart createChart() {

    this.chart = ChartFactory.createXYLineChart(null, "Iteration",
        "Current Error", this.dataset1, PlotOrientation.VERTICAL, true,
        true, false);

    final XYPlot plot = (XYPlot) this.chart.getPlot();
    plot.setOrientation(PlotOrientation.VERTICAL);

    plot.getRangeAxis().setFixedDimension(15.0);

    // AXIS 2
    final NumberAxis axis2 = new NumberAxis("Error Improvement");
    axis2.setFixedDimension(10.0);
    axis2.setAutoRangeIncludesZero(false);
    axis2.setLabelPaint(Color.red);
    axis2.setTickLabelPaint(Color.red);
    plot.setRangeAxis(1, axis2);
    plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);

    plot.setDataset(1, this.dataset2);
    plot.mapDatasetToRangeAxis(1, 1);
    final XYItemRenderer renderer2 = new StandardXYItemRenderer();
    renderer2.setSeriesPaint(0, Color.red);
    plot.setRenderer(1, renderer2);

    ChartUtilities.applyCurrentTheme(this.chart);

    return this.chart;
  }

}
TOP

Related Classes of org.encog.workbench.tabs.training.ChartPane

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.