Example usage for org.jfree.data.xy DefaultXYDataset DefaultXYDataset

List of usage examples for org.jfree.data.xy DefaultXYDataset DefaultXYDataset

Introduction

In this page you can find the example usage for org.jfree.data.xy DefaultXYDataset DefaultXYDataset.

Prototype

public DefaultXYDataset() 

Source Link

Document

Creates a new DefaultXYDataset instance, initially containing no data.

Usage

From source file:net.sf.dynamicreports.test.jasper.chart.ShowValuesChartDataTest.java

@Override
public void test() {
    super.test();

    numberOfPagesTest(1);//from   w  ww . j  a v a2 s  . c  o  m

    DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
    categoryDataset.addValue(1.191, "row", "column");

    JFreeChart chart = getChart("summary.chart1", 0);
    CategoryItemRenderer renderer1 = chart.getCategoryPlot().getRenderer();
    Assert.assertNotNull(renderer1.getBaseItemLabelGenerator());
    Assert.assertEquals("1.19", renderer1.getBaseItemLabelGenerator().generateLabel(categoryDataset, 0, 0));
    Assert.assertTrue(renderer1.getBaseItemLabelsVisible());

    chart = getChart("summary.chart2", 0);
    renderer1 = chart.getCategoryPlot().getRenderer();
    Assert.assertNotNull(renderer1.getBaseItemLabelGenerator());
    Assert.assertEquals("1.2", renderer1.getBaseItemLabelGenerator().generateLabel(categoryDataset, 0, 0));
    Assert.assertTrue(renderer1.getBaseItemLabelsVisible());

    chart = getChart("summary.chart3", 0);
    renderer1 = chart.getCategoryPlot().getRenderer();
    Assert.assertNotNull(renderer1.getBaseItemLabelGenerator());
    Assert.assertTrue(renderer1.getBaseItemLabelsVisible());

    chart = getChart("summary.chart4", 0);
    renderer1 = chart.getCategoryPlot().getRenderer();
    Assert.assertNotNull(renderer1.getBaseItemLabelGenerator());
    Assert.assertTrue(renderer1.getBaseItemLabelsVisible());

    chart = getChart("summary.chart5", 0);
    renderer1 = chart.getCategoryPlot().getRenderer();
    Assert.assertNotNull(renderer1.getBaseItemLabelGenerator());
    Assert.assertTrue(renderer1.getBaseItemLabelsVisible());

    chart = getChart("summary.chart6", 0);
    renderer1 = chart.getCategoryPlot().getRenderer();
    Assert.assertNotNull(renderer1.getBaseItemLabelGenerator());
    Assert.assertTrue(renderer1.getBaseItemLabelsVisible());

    chart = getChart("summary.chart7", 0);
    renderer1 = chart.getCategoryPlot().getRenderer();
    Assert.assertNotNull(renderer1.getBaseItemLabelGenerator());
    Assert.assertTrue(renderer1.getBaseItemLabelsVisible());

    chart = getChart("summary.chart8", 0);
    String labelFormat = ((StandardPieSectionLabelGenerator) ((PiePlot) chart.getPlot()).getLabelGenerator())
            .getLabelFormat();
    Assert.assertEquals("Label format", "{0} = {1}", labelFormat);

    chart = getChart("summary.chart9", 0);
    StandardPieSectionLabelGenerator labelGenerator = (StandardPieSectionLabelGenerator) ((PiePlot) chart
            .getPlot()).getLabelGenerator();
    labelFormat = labelGenerator.getLabelFormat();
    Assert.assertEquals("Label format", "{0} = {1}", labelFormat);
    DefaultPieDataset dataset = new DefaultPieDataset();
    dataset.setValue("key1", 1.192);
    Assert.assertEquals("key1 = 1.2", labelGenerator.generateSectionLabel(dataset, "key1"));

    DefaultXYDataset xyDataset = new DefaultXYDataset();
    xyDataset.addSeries("key", new double[][] { new double[] { 1d }, new double[] { 1.191d } });

    chart = getChart("summary.chart10", 0);
    XYItemRenderer renderer2 = chart.getXYPlot().getRenderer();
    Assert.assertNotNull(renderer2.getBaseItemLabelGenerator());
    Assert.assertEquals("1.19", renderer2.getBaseItemLabelGenerator().generateLabel(xyDataset, 0, 0));
    Assert.assertTrue(renderer2.getBaseItemLabelsVisible());

    chart = getChart("summary.chart11", 0);
    renderer2 = chart.getXYPlot().getRenderer();
    Assert.assertNotNull(renderer2.getBaseItemLabelGenerator());
    Assert.assertEquals("1.2", renderer2.getBaseItemLabelGenerator().generateLabel(xyDataset, 0, 0));
    Assert.assertTrue(renderer2.getBaseItemLabelsVisible());

    chart = getChart("summary.chart12", 0);
    renderer2 = chart.getXYPlot().getRenderer();
    Assert.assertNotNull(renderer2.getBaseItemLabelGenerator());
    Assert.assertTrue(renderer2.getBaseItemLabelsVisible());

    chart = getChart("summary.chart13", 0);
    renderer2 = chart.getXYPlot().getRenderer();
    Assert.assertNotNull(renderer2.getBaseItemLabelGenerator());
    Assert.assertTrue(renderer2.getBaseItemLabelsVisible());

    chart = getChart("summary.chart14", 0);
    renderer2 = chart.getXYPlot().getRenderer();
    Assert.assertNotNull(renderer2.getBaseItemLabelGenerator());
    Assert.assertTrue(renderer2.getBaseItemLabelsVisible());

    chart = getChart("summary.chart15", 0);
    renderer2 = chart.getXYPlot().getRenderer();
    Assert.assertNotNull(renderer2.getBaseItemLabelGenerator());
    Assert.assertEquals("1.2", renderer2.getBaseItemLabelGenerator().generateLabel(xyDataset, 0, 0));
    Assert.assertTrue(renderer2.getBaseItemLabelsVisible());

    chart = getChart("summary.chart16", 0);
    renderer1 = chart.getCategoryPlot().getRenderer();
    Assert.assertNotNull(renderer1.getBaseItemLabelGenerator());
    Assert.assertEquals("1.2", renderer1.getBaseItemLabelGenerator().generateLabel(categoryDataset, 0, 0));
    Assert.assertTrue(renderer1.getBaseItemLabelsVisible());
}

From source file:org.openscience.cdk.applications.taverna.weka.regression.EvaluateRegressionResultsAsPDFActivity.java

@Override
public void work() throws Exception {
    // Get input/*from   www . ja  v  a  2s  .c  om*/
    String[] options = ((String) this.getConfiguration()
            .getAdditionalProperty(CDKTavernaConstants.PROPERTY_SCATTER_PLOT_OPTIONS)).split(";");
    List<File> modelFiles = this.getInputAsFileList(this.INPUT_PORTS[0]);
    List<Instances> trainDatasets = this.getInputAsList(this.INPUT_PORTS[1], Instances.class);
    List<Instances> testDatasets = null;
    if (options[0].equals("" + TEST_TRAININGSET_PORT)) {
        testDatasets = this.getInputAsList(this.INPUT_PORTS[2], Instances.class);
    } else {
        testDatasets = null;
    }
    String directory = modelFiles.get(0).getParent();

    // Do work
    ArrayList<String> resultFiles = new ArrayList<String>();
    HashMap<UUID, Double> orgClassMap = new HashMap<UUID, Double>();
    HashMap<UUID, Double> calcClassMap = new HashMap<UUID, Double>();
    WekaTools tools = new WekaTools();
    ChartTool chartTool = new ChartTool();
    List<Object> rmseCharts = new ArrayList<Object>();
    List<Double> trainMeanRMSE = new ArrayList<Double>();
    List<Double> testMeanRMSE = new ArrayList<Double>();
    List<Double> cvMeanRMSE = new ArrayList<Double>();
    DefaultCategoryDataset[] ratioRMSESet = new DefaultCategoryDataset[trainDatasets.size()];
    for (int i = 0; i < trainDatasets.size(); i++) {
        ratioRMSESet[i] = new DefaultCategoryDataset();
    }
    List<Double> trainingSetRatios = null;
    int fileIDX = 1;
    while (!modelFiles.isEmpty()) {
        trainingSetRatios = new ArrayList<Double>();
        List<Double> trainRMSE = new ArrayList<Double>();
        HashSet<Integer> trainSkippedRMSE = new HashSet<Integer>();
        List<Double> testRMSE = new ArrayList<Double>();
        HashSet<Integer> testSkippedRMSE = new HashSet<Integer>();
        List<Double> cvRMSE = new ArrayList<Double>();
        HashSet<Integer> cvSkippedRMSE = new HashSet<Integer>();
        List<Object> chartsObjects = new LinkedList<Object>();
        File modelFile = null;
        Classifier classifier = null;
        String name = "";
        for (int j = 0; j < trainDatasets.size(); j++) {
            LinkedList<Double> predictedValues = new LinkedList<Double>();
            LinkedList<Double> orgValues = new LinkedList<Double>();
            LinkedList<Double[]> yResidueValues = new LinkedList<Double[]>();
            LinkedList<String> yResidueNames = new LinkedList<String>();
            if (modelFiles.isEmpty()) {
                break;
            }
            calcClassMap.clear();
            modelFile = modelFiles.remove(0);
            classifier = (Classifier) SerializationHelper.read(modelFile.getPath());
            Instances testset = null;
            if (testDatasets != null) {
                testset = testDatasets.get(j);
            }
            name = classifier.getClass().getSimpleName();
            String sum = "Method: " + name + " " + tools.getOptionsFromFile(modelFile, name) + "\n\n";
            // Produce training set data
            Instances trainset = trainDatasets.get(j);
            Instances trainUUIDSet = Filter.useFilter(trainset, tools.getIDGetter(trainset));
            trainset = Filter.useFilter(trainset, tools.getIDRemover(trainset));
            double trainingSetRatio = 1.0;
            if (testset != null) {
                trainingSetRatio = trainset.numInstances()
                        / (double) (trainset.numInstances() + testset.numInstances());
            }
            trainingSetRatios.add(trainingSetRatio * 100);
            // Predict
            for (int k = 0; k < trainset.numInstances(); k++) {
                UUID uuid = UUID.fromString(trainUUIDSet.instance(k).stringValue(0));
                orgClassMap.put(uuid, trainset.instance(k).classValue());
                calcClassMap.put(uuid, classifier.classifyInstance(trainset.instance(k)));
            }
            // Evaluate
            Evaluation trainEval = new Evaluation(trainset);
            trainEval.evaluateModel(classifier, trainset);
            // Chart data
            DefaultXYDataset xyDataSet = new DefaultXYDataset();
            String trainSeries = "Training Set (RMSE: "
                    + String.format("%.2f", trainEval.rootMeanSquaredError()) + ")";
            XYSeries series = new XYSeries(trainSeries);
            Double[] yTrainResidues = new Double[trainUUIDSet.numInstances()];
            Double[] orgTrain = new Double[trainUUIDSet.numInstances()];
            Double[] calc = new Double[trainUUIDSet.numInstances()];
            for (int k = 0; k < trainUUIDSet.numInstances(); k++) {
                UUID uuid = UUID.fromString(trainUUIDSet.instance(k).stringValue(0));
                orgTrain[k] = orgClassMap.get(uuid);
                calc[k] = calcClassMap.get(uuid);
                if (calc[k] != null && orgTrain[k] != null) {
                    series.add(orgTrain[k].doubleValue(), calc[k]);
                    yTrainResidues[k] = calc[k].doubleValue() - orgTrain[k].doubleValue();
                } else {
                    ErrorLogger.getInstance().writeError("Can't find value for UUID: " + uuid.toString(),
                            this.getActivityName());
                    throw new CDKTavernaException(this.getActivityName(),
                            "Can't find value for UUID: " + uuid.toString());
                }
            }
            orgValues.addAll(Arrays.asList(orgTrain));
            predictedValues.addAll(Arrays.asList(calc));
            CollectionUtilities.sortTwoArrays(orgTrain, yTrainResidues);
            yResidueValues.add(yTrainResidues);
            yResidueNames.add(trainSeries);
            xyDataSet.addSeries(trainSeries, series.toArray());

            // Summary
            sum += "Training Set:\n";
            if (trainEval.rootRelativeSquaredError() > 300) {
                trainSkippedRMSE.add(j);
            }
            trainRMSE.add(trainEval.rootMeanSquaredError());
            sum += trainEval.toSummaryString(true);
            // Produce test set data
            if (testset != null) {
                Instances testUUIDSet = Filter.useFilter(testset, tools.getIDGetter(testset));
                testset = Filter.useFilter(testset, tools.getIDRemover(testset));
                // Predict
                for (int k = 0; k < testset.numInstances(); k++) {
                    UUID uuid = UUID.fromString(testUUIDSet.instance(k).stringValue(0));
                    orgClassMap.put(uuid, testset.instance(k).classValue());
                    calcClassMap.put(uuid, classifier.classifyInstance(testset.instance(k)));
                }
                // Evaluate
                Evaluation testEval = new Evaluation(testset);
                testEval.evaluateModel(classifier, testset);
                // Chart data
                String testSeries = "Test Set (RMSE: " + String.format("%.2f", testEval.rootMeanSquaredError())
                        + ")";
                series = new XYSeries(testSeries);
                Double[] yTestResidues = new Double[testUUIDSet.numInstances()];
                Double[] orgTest = new Double[testUUIDSet.numInstances()];
                calc = new Double[testUUIDSet.numInstances()];
                for (int k = 0; k < testUUIDSet.numInstances(); k++) {
                    UUID uuid = UUID.fromString(testUUIDSet.instance(k).stringValue(0));
                    orgTest[k] = orgClassMap.get(uuid);
                    calc[k] = calcClassMap.get(uuid);
                    if (calc[k] != null && orgTest[k] != null) {
                        series.add(orgTest[k].doubleValue(), calc[k].doubleValue());
                        yTestResidues[k] = calc[k].doubleValue() - orgTest[k].doubleValue();
                    } else {
                        ErrorLogger.getInstance().writeError("Can't find value for UUID: " + uuid.toString(),
                                this.getActivityName());
                        throw new CDKTavernaException(this.getActivityName(),
                                "Can't find value for UUID: " + uuid.toString());
                    }
                }
                orgValues.addAll(Arrays.asList(orgTest));
                predictedValues.addAll(Arrays.asList(calc));
                CollectionUtilities.sortTwoArrays(orgTest, yTestResidues);
                yResidueValues.add(yTestResidues);
                yResidueNames.add(testSeries);
                xyDataSet.addSeries(testSeries, series.toArray());
                // Create summary
                sum += "\nTest Set:\n";
                if (testEval.rootRelativeSquaredError() > 300) {
                    testSkippedRMSE.add(j);
                }
                testRMSE.add(testEval.rootMeanSquaredError());
                sum += testEval.toSummaryString(true);
            }
            // Produce cross validation data
            if (Boolean.parseBoolean(options[1])) {
                Evaluation cvEval = new Evaluation(trainset);
                if (testset != null) {
                    Instances fullSet = tools.getFullSet(trainset, testset);
                    cvEval.crossValidateModel(classifier, fullSet, 10, new Random(1));
                } else {
                    cvEval.crossValidateModel(classifier, trainset, 10, new Random(1));
                }
                sum += "\n10-fold cross-validation:\n";
                if (cvEval.rootRelativeSquaredError() > 300) {
                    cvSkippedRMSE.add(j);
                }
                cvRMSE.add(cvEval.rootMeanSquaredError());
                sum += cvEval.toSummaryString(true);
            }

            // Create scatter plot
            String header = classifier.getClass().getSimpleName() + "\n Training set ratio: "
                    + String.format("%.2f", trainingSetRatios.get(j)) + "%" + "\n Model name: "
                    + modelFile.getName();
            chartsObjects
                    .add(chartTool.createScatterPlot(xyDataSet, header, "Original values", "Predicted values"));
            // Create residue plot
            chartsObjects.add(chartTool.createResiduePlot(yResidueValues, header, "Index",
                    "(Predicted - Original)", yResidueNames));
            // Create curve
            Double[] tmpOrg = new Double[orgValues.size()];
            tmpOrg = orgValues.toArray(tmpOrg);
            Double[] tmpPred = new Double[predictedValues.size()];
            tmpPred = predictedValues.toArray(tmpPred);
            CollectionUtilities.sortTwoArrays(tmpOrg, tmpPred);
            DefaultXYDataset dataSet = new DefaultXYDataset();
            String orgName = "Original";
            XYSeries orgSeries = new XYSeries(orgName);
            String predName = "Predicted";
            XYSeries predSeries = new XYSeries(predName);
            for (int k = 0; k < tmpOrg.length; k++) {
                orgSeries.add((k + 1), tmpOrg[k]);
                predSeries.add((k + 1), tmpPred[k]);
            }
            dataSet.addSeries(orgName, orgSeries.toArray());
            dataSet.addSeries(predName, predSeries.toArray());
            chartsObjects.add(chartTool.createXYLineChart(header, "Index", "Value", dataSet, true, false));
            // Add summary
            chartsObjects.add(sum);
        }
        // Create RMSE Plot
        DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
        double meanRMSE = 0;
        for (int i = 0; i < trainRMSE.size(); i++) {
            if (!trainSkippedRMSE.contains(i)) {
                dataSet.addValue(trainRMSE.get(i), "Training Set",
                        "(" + String.format("%.2f", trainingSetRatios.get(i)) + "%/" + (i + 1) + ")");
                ratioRMSESet[i].addValue(trainRMSE.get(i), "Training Set",
                        "(" + String.format("%.2f", trainingSetRatios.get(i)) + "%/" + (i + 1) + "/" + fileIDX
                                + ")");
            }
            meanRMSE += trainRMSE.get(i);
        }
        trainMeanRMSE.add(meanRMSE / trainRMSE.size());
        meanRMSE = 0;
        if (!testRMSE.isEmpty()) {
            for (int i = 0; i < testRMSE.size(); i++) {
                if (!testSkippedRMSE.contains(i)) {
                    dataSet.addValue(testRMSE.get(i), "Test Set",
                            "(" + String.format("%.2f", trainingSetRatios.get(i)) + "%/" + (i + 1) + ")");
                    ratioRMSESet[i].addValue(testRMSE.get(i), "Test Set",
                            "(" + String.format("%.2f", trainingSetRatios.get(i)) + "%/" + (i + 1) + "/"
                                    + fileIDX + ")");
                }
                meanRMSE += testRMSE.get(i);
            }
            testMeanRMSE.add(meanRMSE / testRMSE.size());
        }
        meanRMSE = 0;
        if (!cvRMSE.isEmpty()) {
            for (int i = 0; i < cvRMSE.size(); i++) {
                if (!cvSkippedRMSE.contains(i)) {
                    dataSet.addValue(cvRMSE.get(i), "10-fold Cross-validation",
                            "(" + String.format("%.2f", trainingSetRatios.get(i)) + "%/" + (i + 1) + ")");
                    ratioRMSESet[i].addValue(cvRMSE.get(i), "10-fold Cross-validation",
                            "(" + String.format("%.2f", trainingSetRatios.get(i)) + "%/" + (i + 1) + "/"
                                    + fileIDX + ")");
                }
                meanRMSE += cvRMSE.get(i);
            }
            cvMeanRMSE.add(meanRMSE / cvRMSE.size());
        }
        JFreeChart rmseChart = chartTool.createLineChart(
                "RMSE Plot\n Classifier:" + name + " " + tools.getOptionsFromFile(modelFile, name),
                "(Training set ratio/Set Index/File index)", "RMSE", dataSet, false, true);
        chartsObjects.add(rmseChart);
        rmseCharts.add(rmseChart);
        // Write PDF
        File file = FileNameGenerator.getNewFile(directory, ".pdf", "ScatterPlot");
        chartTool.writeChartAsPDF(file, chartsObjects);
        resultFiles.add(file.getPath());
        fileIDX++;
    }
    // Create set ratio RMSE plots
    for (int i = 0; i < ratioRMSESet.length; i++) {
        JFreeChart rmseChart = chartTool
                .createLineChart(
                        "Set RMSE plot\n" + "(" + String.format("%.2f", trainingSetRatios.get(i)) + "%/"
                                + (i + 1) + ")",
                        "(Training set ratio/Index)", "RMSE", ratioRMSESet[i], false, true);
        rmseCharts.add(rmseChart);
    }
    // Create mean RMSE plot
    DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
    for (int i = 0; i < trainMeanRMSE.size(); i++) {
        dataSet.addValue(trainMeanRMSE.get(i), "Training Set", "" + (i + 1));
    }
    for (int i = 0; i < testMeanRMSE.size(); i++) {
        dataSet.addValue(testMeanRMSE.get(i), "Test Set", "" + (i + 1));
    }
    for (int i = 0; i < cvMeanRMSE.size(); i++) {
        dataSet.addValue(cvMeanRMSE.get(i), "10-fold Cross-validation", "" + (i + 1));
    }
    JFreeChart rmseChart = chartTool.createLineChart("RMSE Mean Plot", "Dataset number", "Mean RMSE", dataSet);
    rmseCharts.add(rmseChart);
    File file = FileNameGenerator.getNewFile(directory, ".pdf", "RMSE-Sum");
    chartTool.writeChartAsPDF(file, rmseCharts);
    resultFiles.add(file.getPath());
    // Set output
    this.setOutputAsStringList(resultFiles, this.OUTPUT_PORTS[0]);
}

From source file:com.rapidminer.gui.plotter.charts.MultipleScatterPlotter.java

private void prepareData() {
    idMap.clear();// www. ja  v  a  2  s .c  o m
    this.plotIndexToColumnIndexMap.clear();
    dataSet = new DefaultXYDataset();

    if (xAxis >= 0) {
        Map<String, List<double[]>> dataCollection = new LinkedHashMap<String, List<double[]>>();
        Map<String, List<String>> idCollection = new LinkedHashMap<String, List<String>>();

        synchronized (dataTable) {
            for (int column = 0; column < plotColumns.length; column++) {
                if (plotColumns[column]) {
                    plotIndexToColumnIndexMap.add(column);
                    String columnName = this.dataTable.getColumnName(column);
                    Iterator<DataTableRow> i = this.dataTable.iterator();
                    int index = 0;
                    while (i.hasNext()) {
                        DataTableRow row = i.next();

                        double xValue = row.getValue(xAxis);
                        double yValue = row.getValue(column);

                        if (!Double.isNaN(xValue) && !Double.isNaN(yValue)) {
                            addPoint(dataCollection, idCollection, row.getId(), xValue, yValue, columnName);
                        }
                        index++;
                    }
                }
            }
        }

        double minX = Double.POSITIVE_INFINITY;
        double maxX = Double.NEGATIVE_INFINITY;
        double minY = Double.POSITIVE_INFINITY;
        double maxY = Double.NEGATIVE_INFINITY;

        Iterator<Map.Entry<String, List<double[]>>> i = dataCollection.entrySet().iterator();
        while (i.hasNext()) {
            Map.Entry<String, List<double[]>> entry = i.next();
            List<double[]> dataList = entry.getValue();
            Iterator<double[]> j = dataList.iterator();
            while (j.hasNext()) {
                double[] current = j.next();
                minX = Math.min(minX, current[0]);
                maxX = Math.max(maxX, current[0]);
                minY = Math.min(minY, current[1]);
                maxY = Math.max(maxY, current[1]);
            }
        }

        Random jitterRandom = new Random(2001);
        double oldXRange = maxX - minX;
        double oldYRange = maxY - minY;

        if (Double.isInfinite(oldXRange) || Double.isNaN(oldXRange)) {
            oldXRange = 0;
        }
        if (Double.isInfinite(oldYRange) || Double.isNaN(oldYRange)) {
            oldYRange = 0;
        }

        i = dataCollection.entrySet().iterator();
        while (i.hasNext()) {
            Map.Entry<String, List<double[]>> entry = i.next();
            String seriesName = entry.getKey();
            List<double[]> dataList = entry.getValue();

            double[][] data = new double[2][dataList.size()];
            int listCounter = 0;
            Iterator<double[]> j = dataList.iterator();
            while (j.hasNext()) {
                double[] current = j.next();
                data[0][listCounter] = current[0];
                data[1][listCounter] = current[1];

                if (this.jitterAmount > 0) {
                    double pertX = oldXRange * (jitterAmount / 200.0d) * jitterRandom.nextGaussian();
                    double pertY = oldYRange * (jitterAmount / 200.0d) * jitterRandom.nextGaussian();
                    data[0][listCounter] += pertX;
                    data[1][listCounter] += pertY;
                }

                listCounter++;
            }
            ((DefaultXYDataset) dataSet).addSeries(seriesName, data);
        }

        int seriesCounter = 0;
        Iterator<List<String>> v = idCollection.values().iterator();
        while (v.hasNext()) {
            List<String> idList = v.next();
            int itemCounter = 0;
            Iterator<String> j = idList.iterator();
            while (j.hasNext()) {
                idMap.put(new SeriesAndItem(seriesCounter, itemCounter++), j.next());
            }
            seriesCounter++;
        }
    }
}

From source file:uk.ac.leeds.ccg.andyt.projects.moses.process.RegressionReport.java

public static JFreeChart getYEqualsXLineChart(double[][] data, String xAxisLabel_String,
        String yAxisLabel_String) {
    JFreeChart a_XYLineChart = null;//  w  w  w.j  av  a 2  s .  c  o  m
    String title = null;
    boolean legend = false;
    boolean tooltips = false;
    boolean urls = false;
    double[][] lineChartData = new double[2][2];
    lineChartData[0][0] = Double.MAX_VALUE;// min_CASObservedData;
    lineChartData[0][1] = Double.MIN_VALUE;// max_CASObservedData;
    lineChartData[1][0] = Double.MAX_VALUE;// min_SARExpectedData;
    lineChartData[1][1] = Double.MIN_VALUE;// max_SARExpectedData;
    for (int j = 0; j < data[0].length; j++) {
        lineChartData[0][0] = Math.min(lineChartData[0][0], data[0][j]);
        lineChartData[0][1] = Math.max(lineChartData[0][1], data[0][j]);
        lineChartData[1][0] = Math.min(lineChartData[1][0], data[1][j]);
        lineChartData[1][1] = Math.max(lineChartData[1][1], data[1][j]);
    }
    lineChartData[1][0] = lineChartData[0][0];
    lineChartData[0][1] = Math.min(lineChartData[1][1], lineChartData[0][1]);
    lineChartData[1][1] = lineChartData[0][1];
    System.out.println("min lineChartData[0][0] " + lineChartData[0][0]);
    System.out.println("max lineChartData[0][1] " + lineChartData[0][1]);
    System.out.println("min lineChartData[1][0] " + lineChartData[1][0]);
    System.out.println("max lineChartData[1][1] " + lineChartData[1][1]);
    DefaultXYDataset a_DefaultXYDataset = new DefaultXYDataset();
    a_DefaultXYDataset.addSeries("y = x", lineChartData);
    a_XYLineChart = ChartFactory.createXYLineChart(title, xAxisLabel_String, yAxisLabel_String,
            a_DefaultXYDataset, PlotOrientation.HORIZONTAL, legend, tooltips, urls);
    return a_XYLineChart;
}

From source file:delphsim.model.Resultado.java

/**
 * Mtodo para construir una grfica de tipo <CODE>JFreeChart</CODE> con
 * los valores de este resultado y sus funciones y obtener como resultado
 * el panel de tipo <CODE>ChartPanel</CODE> que la contiene.
 * @return Un panel <CODE>ChartPanel</CODE> con la nueva grfica.
 *//*from   w  ww  . ja  v a 2  s  . co  m*/
public ChartPanel construirPanelResultado() {
    DefaultXYDataset data = new DefaultXYDataset();
    for (int i = 0; i < this.getNumFunciones(); i++) {
        String nombre = this.funciones[i].getNombre();
        double[][] puntos = new double[2][this.puntosTiempo.size()];
        for (int j = 0; j < this.puntosTiempo.size(); j++) {
            puntos[0][j] = Double.valueOf(this.puntosTiempo.get(j).toString());
            puntos[1][j] = this.funciones[i].getPunto(j);
        }
        data.addSeries(nombre, puntos);
    }
    JFreeChart chart = ChartFactory.createXYLineChart(this.getTitulo(), // ttulo laaargo
            this.getXLabel(), // xLabel
            this.getYLabel(), // yLabel
            data, // datos
            PlotOrientation.VERTICAL, true, // legenda
            true, // tooltips
            false // URLs
    );
    for (int i = 0; i < this.getNumFunciones(); i++) {
        chart.getXYPlot().getRenderer().setSeriesStroke(i, new BasicStroke(this.funciones[i].getGrosor()));
        chart.getXYPlot().getRenderer().setSeriesPaint(i, this.funciones[i].getColor());
    }
    ChartPanel panel = new ChartPanel(chart, // grfica
            true, // propiedades
            false, // guardar
            false, // imprimir
            true, // zoom
            true // tooltips
    );
    this.grafica = chart;
    return panel;
}

From source file:edu.fullerton.timeseriesapp.TimeSeriesApp.java

public ArrayList<Integer> makePlot(ArrayList<ChanDataBuffer> dbufs, boolean compact) throws WebUtilException {
    int imageId;//from w ww .  j av  a 2  s  . c  o m
    try {
        PluginSupport psupport = new PluginSupport();
        String gtitle = psupport.getTitle(dbufs, compact);
        String xAxisLabel = "";
        XYSeriesCollection xyds = new XYSeriesCollection();
        TimeSeriesCollection mtds = new TimeSeriesCollection();

        compact = dbufs.size() > 2 ? false : compact;
        for (ChanDataBuffer dbuf : dbufs) {
            int npts = dbuf.getDataLength();
            int sum = 1;
            if (npts > 2000) {
                sum = npts / 2000;
            }
            String legend = psupport.getLegend(dbuf, compact);
            if (timeAxis.equalsIgnoreCase("utc")) {
                TimeSeries ts = psupport.getTimeSeries(dbuf, legend, sum);
                xAxisLabel = "Time (UTC)";
                mtds.addSeries(ts);
            } else {
                boolean isDt = timeAxis.equalsIgnoreCase("dt");
                XYSeries xys = psupport.addXySeries(dbuf, legend, isDt, sum);
                xAxisLabel = psupport.getxAxisLabel();
                xyds.addSeries(xys);
            }
        }
        Double minx, miny, maxx, maxy;
        Double[] rng = new Double[4];

        if (timeAxis.equalsIgnoreCase("utc")) {
            PluginSupport.getRangeLimits(mtds, rng);
        } else {
            int skip = 0;
            PluginSupport.getRangeLimits(xyds, rng, skip);
        }
        minx = rng[0];
        miny = rng[1];
        maxx = rng[2];
        maxy = rng[3];

        int exp;
        if (timeAxis.equalsIgnoreCase("utc")) {
            exp = PluginSupport.scaleRange(mtds, miny, maxy);
        } else {
            exp = PluginSupport.scaleRange(xyds, miny, maxy);
        }

        ChartPanel cpnl;
        DefaultXYDataset ds = new DefaultXYDataset();
        JFreeChart chart;
        if (timeAxis.equalsIgnoreCase("utc")) {
            chart = ChartFactory.createTimeSeriesChart(gtitle, "Time (UTC)", "Counts", ds, true, true, false);
        } else {
            chart = ChartFactory.createXYLineChart(gtitle, xAxisLabel, "Counts", ds, PlotOrientation.VERTICAL,
                    true, false, false);
        }
        chart.setBackgroundPaint(Color.WHITE);
        chart.setAntiAlias(true);

        XYPlot plot = (XYPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.white);
        plot.setRangeGridlinePaint(Color.LIGHT_GRAY);
        plot.setDomainGridlinePaint(Color.LIGHT_GRAY);

        NumberAxis rangeAxis = new NumberAxis("Counts");
        ScaledAxisNumberFormat sanf = new ScaledAxisNumberFormat();
        sanf.setExp(exp);
        NumberTickUnit tickUnit;
        double plotRange;
        if (maxy != 0 && Math.abs(maxy - miny) < Math.abs(maxy) * 1e-30) {
            // this garbage is to get jFreeChart to always put labels on the Y axis
            double dt = Math.abs(miny) / 10;
            double scaledMin = (miny - dt) * Math.pow(10., exp);
            double scaledMax = (maxy + dt) * Math.pow(10., exp);
            rangeAxis.setRange(scaledMin, scaledMax);
            plotRange = scaledMax - scaledMin;
            rangeAxis.setAutoRange(false);
        } else {
            sanf.setMinMax(miny, maxy);
            plotRange = maxy - miny;
            rangeAxis.setAutoRange(true);
        }
        tickUnit = rangeAxis.getTickUnit();
        double tickSize = tickUnit.getSize();
        int nticks = (int) ((plotRange) / tickSize);
        if (nticks > yTicks) {
            double newTickSize = plotRange / yTicks;
            rangeAxis.setTickUnit(new NumberTickUnit(newTickSize));
        }
        rangeAxis.setNumberFormatOverride(sanf);
        rangeAxis.setAutoRangeIncludesZero(false);
        plot.setRangeAxis(rangeAxis);

        if (timeAxis.equalsIgnoreCase("utc")) {
            plot.setDataset(0, mtds);

        } else {
            plot.setDataset(0, xyds);
        }

        // Set the line thickness
        XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer();
        BasicStroke str = new BasicStroke(lineThickness);
        int n = plot.getSeriesCount();
        for (int i = 0; i < n; i++) {
            r.setSeriesStroke(i, str);
        }

        if (compact) {
            chart.removeLegend();
        }
        cpnl = new ChartPanel(chart);
        if (outFilename.isEmpty()) {
            imageId = psupport.saveImageAsPNG(cpnl);
        } else {
            imageId = 0;
            psupport.saveImageAsPdfFile(chart, outFilename);
        }

    } catch (SQLException | NoSuchAlgorithmException | IOException ex) {
        throw new WebUtilException(ex);
    }
    ArrayList<Integer> ret = new ArrayList<>();
    ret.add(imageId);
    return ret;
}

From source file:be.nbb.demetra.dfm.output.simulation.RMSEGraphView.java

private void toDataset(DfmSimulation dfmSimulation) {
    DefaultXYDataset dfmDataset = new DefaultXYDataset();
    DefaultXYDataset arimaDataset = new DefaultXYDataset();
    DefaultXYDataset stdevDataset = new DefaultXYDataset();

    Objects.requireNonNull(dfmSimulation);

    int selectedIndex = comboBox.getSelectedIndex();
    DfmSimulationResults dfm = dfmSimulation.getDfmResults().get(selectedIndex);
    DfmSimulationResults arima = dfmSimulation.getArimaResults().get(selectedIndex);
    List<Double> trueValues = dfm.getTrueValues();
    horizons = dfm.getForecastHorizons();
    periods = dfm.getEvaluationSample();

    // Remove periods of evaluation sample not in true values domain
    filteredPeriods = filterEvaluationSample(trueValues);

    if (filterPanel == null) {
        filterPanel = new FilterEvaluationSamplePanel(filteredPeriods);
    }//from   w  ww .j  a v  a 2s .  c om

    Double[][] dfmFcts = dfm.getForecastsArray();
    Double[][] arimaFcts = arima.getForecastsArray();

    Map<Integer, TsData> dfmTs = new HashMap<>();
    Map<Integer, TsData> arimaTs = new HashMap<>();

    TsFrequency freq = periods.get(0).getFrequency();

    TsDataCollector coll = new TsDataCollector();
    for (int i = 0; i < periods.size(); i++) {
        if (trueValues.get(i) != null) {
            coll.addObservation(periods.get(i).middle(), trueValues.get(i));
        } else {
            coll.addMissingValue(periods.get(i).middle());
        }
    }
    TsData trueTsData = coll.make(freq, TsAggregationType.None);

    fillMap(dfmTs, dfmFcts, freq);
    fillMap(arimaTs, arimaFcts, freq);

    int size = dfmTs.size();
    xvalues = new double[size];
    dfmValues = new double[size];
    arimaValues = new double[size];

    TsPeriod start = filteredPeriods.get(filterPanel.getStart());
    TsPeriod end = filteredPeriods.get(filterPanel.getEnd());
    TsDomain dom = new TsDomain(start, end.minus(start) + 1);

    int index = 0;
    for (Integer horizon : horizons) {
        if (dfmTs.containsKey(horizon)) {
            ForecastEvaluationResults rslt = new ForecastEvaluationResults(dfmTs.get(horizon).fittoDomain(dom),
                    arimaTs.get(horizon).fittoDomain(dom), trueTsData);
            dfmValues[index] = rslt.calcRMSE();
            arimaValues[index] = rslt.calcRMSE_Benchmark();
            xvalues[index] = horizon;
            index++;
        }
    }
    dfmDataset.addSeries("RMSE (simulation based rec. est.)", new double[][] { xvalues, dfmValues });
    arimaDataset.addSeries("RMSE (Arima recursive est.)", new double[][] { xvalues, arimaValues });

    // Stdev
    Map<Day, SimulationResultsDocument> results = dfmSimulation.getResults();
    Day[] cal = new Day[results.size()];
    cal = results.keySet().toArray(cal);
    Arrays.sort(cal);
    TsPeriod lastPeriod = filteredPeriods.get(filterPanel.getEnd());

    xStdev = new ArrayList<>();
    yStdev = new ArrayList<>();

    DfmSeriesDescriptor selected = (DfmSeriesDescriptor) comboBox.getSelectedItem();
    List<DfmSeriesDescriptor> descs = dfmSimulation.getDescriptions();
    int realIndex = 0;
    boolean found = false;
    while (!found) {
        if (selected.description.equals(descs.get(realIndex).description)) {
            found = true;
        } else {
            realIndex++;
        }
    }

    for (Day d : cal) {
        int horizon = d.difference(lastPeriod.lastday());
        if (dfmTs.containsKey(horizon)) {
            TsData[] smoothStdev = results.get(d).getSmoothedSeriesStdev();
            if (smoothStdev != null) {
                TsData stdevs = results.get(d).getSmoothedSeriesStdev()[selectedIndex];
                if (!stdevs.getFrequency().equals(lastPeriod.getFrequency())) {
                    stdevs = stdevs.changeFrequency(lastPeriod.getFrequency(), TsAggregationType.Last, true);
                }
                Double stdev = stdevs.get(lastPeriod);
                xStdev.add(horizon);
                yStdev.add(stdev);
            }
        }
    }

    double[] xStdevArray = new double[xStdev.size()];
    double[] yStdevArray = new double[xStdev.size()];
    for (int i = 0; i < xStdevArray.length; i++) {
        xStdevArray[i] = xStdev.get(i);
        yStdevArray[i] = yStdev.get(i);
    }

    stdevDataset.addSeries("Stdev", new double[][] { xStdevArray, yStdevArray });

    XYPlot plot = chartPanel.getChart().getXYPlot();

    plot.setDataset(DFM_INDEX, dfmDataset);
    plot.setDataset(ARIMA_INDEX, arimaDataset);
    plot.setDataset(STDEV_INDEX, stdevDataset);

    chartPanel.getChart()
            .setTitle("Evaluation sample from " + filteredPeriods.get(filterPanel.getStart()).toString()
                    + " to " + filteredPeriods.get(filterPanel.getEnd()).toString());
}

From source file:com.rapidminer.gui.plotter.charts.Abstract2DChartPlotter.java

private void prepareNominalData() {
    this.nominal = true;
    dataSet = new DefaultXYDataset();

    if (axis[X_AXIS] >= 0 && axis[Y_AXIS] >= 0) {
        Map<String, List<double[]>> dataCollection = new LinkedHashMap<String, List<double[]>>();
        Map<String, List<String>> idCollection = new LinkedHashMap<String, List<String>>();

        synchronized (dataTable) {
            if (colorColumn >= 0) {
                for (int v = 0; v < dataTable.getNumberOfValues(colorColumn); v++) {
                    dataCollection.put(dataTable.mapIndex(colorColumn, v), new LinkedList<double[]>());
                    idCollection.put(dataTable.mapIndex(colorColumn, v), new LinkedList<String>());
                }/*from ww  w  .jav a 2  s . co  m*/
            }

            Iterator<DataTableRow> i = this.dataTable.iterator();
            int index = 0;
            while (i.hasNext()) {
                DataTableRow row = i.next();

                double xValue = row.getValue(axis[X_AXIS]);
                double yValue = row.getValue(axis[Y_AXIS]);

                double colorValue = Double.NaN;
                if (colorColumn >= 0) {
                    colorValue = row.getValue(colorColumn);
                }

                // TM: removed check
                // if (!Double.isNaN(xValue) && !Double.isNaN(yValue)) {
                addPoint(dataCollection, idCollection, row.getId(), xValue, yValue, colorValue);
                // }
                index++;
            }
        }

        double minX = Double.POSITIVE_INFINITY;
        double maxX = Double.NEGATIVE_INFINITY;
        double minY = Double.POSITIVE_INFINITY;
        double maxY = Double.NEGATIVE_INFINITY;

        Iterator<Map.Entry<String, List<double[]>>> i = dataCollection.entrySet().iterator();
        while (i.hasNext()) {
            Map.Entry<String, List<double[]>> entry = i.next();
            List<double[]> dataList = entry.getValue();
            Iterator<double[]> j = dataList.iterator();
            while (j.hasNext()) {
                double[] current = j.next();
                minX = MathFunctions.robustMin(minX, current[X_AXIS]);
                maxX = MathFunctions.robustMax(maxX, current[X_AXIS]);
                minY = MathFunctions.robustMin(minY, current[Y_AXIS]);
                maxY = MathFunctions.robustMax(maxY, current[Y_AXIS]);
            }
        }

        Random jitterRandom = new Random(2001);
        double oldXRange = maxX - minX;
        double oldYRange = maxY - minY;

        if (Double.isInfinite(oldXRange) || Double.isNaN(oldXRange)) {
            oldXRange = 0;
        }
        if (Double.isInfinite(oldYRange) || Double.isNaN(oldYRange)) {
            oldYRange = 0;
        }

        i = dataCollection.entrySet().iterator();
        while (i.hasNext()) {
            Map.Entry<String, List<double[]>> entry = i.next();
            String seriesName = entry.getKey();
            List<double[]> dataList = entry.getValue();

            double[][] data = new double[2][dataList.size()];
            int listCounter = 0;
            Iterator<double[]> j = dataList.iterator();
            while (j.hasNext()) {
                double[] current = j.next();
                data[X_AXIS][listCounter] = current[X_AXIS];
                data[Y_AXIS][listCounter] = current[Y_AXIS];

                if (this.jitterAmount > 0) {
                    double pertX = oldXRange * (jitterAmount / 200.0d) * jitterRandom.nextGaussian();
                    double pertY = oldYRange * (jitterAmount / 200.0d) * jitterRandom.nextGaussian();
                    data[X_AXIS][listCounter] += pertX;
                    data[Y_AXIS][listCounter] += pertY;
                }

                listCounter++;
            }

            ((DefaultXYDataset) dataSet).addSeries(seriesName, data);
        }

        int seriesCounter = 0;
        Iterator<List<String>> v = idCollection.values().iterator();
        while (v.hasNext()) {
            List<String> idList = v.next();
            int itemCounter = 0;
            Iterator<String> j = idList.iterator();
            while (j.hasNext()) {
                idMap.put(new SeriesAndItem(seriesCounter, itemCounter++), j.next());
            }
            seriesCounter++;
        }
    }
}

From source file:rod_design_compute.ShowPanel.java

private void chartPoint() {
    DefaultXYDataset dataset1 = new DefaultXYDataset();
    DefaultXYDataset dataset2 = new DefaultXYDataset();
    DefaultXYDataset dataset3 = new DefaultXYDataset();
    DefaultXYDataset dataset4 = new DefaultXYDataset();
    DefaultXYDataset dataset5 = new DefaultXYDataset();
    DefaultXYDataset dataset6 = new DefaultXYDataset();
    DefaultXYDataset dataset7 = new DefaultXYDataset();
    DefaultXYDataset dataset8 = new DefaultXYDataset();

    Point indicator = null;/*from   www  .  j a  va  2s.c  om*/
    chooseRodGroup = parent.arrayRodGroup.get(chooseIndex);

    int amount;
    if (parent.upperLimit == -1)
        amount = parent.resolution;
    else
        amount = parent.upperLimit;

    double[][][] data = new double[8][2][amount];
    for (int i = 0; i < amount; i++) {
        for (int j = 0; j < 8; j++)
            data[j][0][i] = i;
        if (chooseRodGroup.getType() == RodGroup.SR) {
            if (choosePoint == ((SR) (chooseRodGroup)).getPointA())
                indicator = ((SR) (parent.arrayRecord.get(i).get(chooseIndex))).getPointA();
            else if (choosePoint == ((SR) (chooseRodGroup)).getPointB())
                indicator = ((SR) (parent.arrayRecord.get(i).get(chooseIndex))).getPointB();
            else if (((SR) (chooseRodGroup)).flag == true) {
                if (choosePoint == ((SR) (chooseRodGroup)).getPointE())
                    indicator = ((SR) (parent.arrayRecord.get(i).get(chooseIndex))).getPointE();
            }
        } else if (chooseRodGroup.getType() == RodGroup.RRR) {
            if (choosePoint == ((RRR) (chooseRodGroup)).getPointB())
                indicator = ((RRR) (parent.arrayRecord.get(i).get(chooseIndex))).getPointB();
            else if (choosePoint == ((RRR) (chooseRodGroup)).getPointC())
                indicator = ((RRR) (parent.arrayRecord.get(i).get(chooseIndex))).getPointC();
            else if (choosePoint == ((RRR) (chooseRodGroup)).getPointD())
                indicator = ((RRR) (parent.arrayRecord.get(i).get(chooseIndex))).getPointD();
            else if (((RRR) (chooseRodGroup)).flag2 == true || ((RRR) (chooseRodGroup)).flag3 == true) {
                if (choosePoint == ((RRR) (chooseRodGroup)).getPointE())
                    indicator = ((RRR) (parent.arrayRecord.get(i).get(chooseIndex))).getPointE();
            }
        } else if (chooseRodGroup.getType() == RodGroup.RRP) {
            if (choosePoint == ((RRP) (chooseRodGroup)).getPointB())
                indicator = ((RRP) (parent.arrayRecord.get(i).get(chooseIndex))).getPointB();
            else if (choosePoint == ((RRP) (chooseRodGroup)).getPointC())
                indicator = ((RRP) (parent.arrayRecord.get(i).get(chooseIndex))).getPointC();
        }
        getPointData(data, indicator, i);
    }

    dataset1.addSeries("Vx", data[0]);
    dataset2.addSeries("Vy", data[1]);
    dataset3.addSeries("V", data[2]);
    dataset4.addSeries("ax", data[3]);
    dataset5.addSeries("ay", data[4]);
    dataset6.addSeries("a", data[5]);
    dataset7.addSeries("X", data[6]);
    dataset8.addSeries("Y", data[7]);

    JFreeChart chart1 = ChartFactory.createXYLineChart("Vx", "angle()", "Vx", dataset1,
            PlotOrientation.VERTICAL, false, false, false);
    JFreeChart chart2 = ChartFactory.createXYLineChart("Vy", "angle()", "Vy", dataset2,
            PlotOrientation.VERTICAL, false, false, false);
    JFreeChart chart3 = ChartFactory.createXYLineChart("V", "angle()", "V", dataset3,
            PlotOrientation.VERTICAL, false, false, false);
    JFreeChart chart4 = ChartFactory.createXYLineChart("ax", "angle()", "ax", dataset4,
            PlotOrientation.VERTICAL, false, false, false);
    JFreeChart chart5 = ChartFactory.createXYLineChart("ay", "angle()", "ay", dataset5,
            PlotOrientation.VERTICAL, false, false, false);
    JFreeChart chart6 = ChartFactory.createXYLineChart("a", "angle()", "a", dataset6,
            PlotOrientation.VERTICAL, false, false, false);
    JFreeChart chart7 = ChartFactory.createXYLineChart("X", "angle()", "X", dataset7,
            PlotOrientation.VERTICAL, false, false, false);
    JFreeChart chart8 = ChartFactory.createXYLineChart("Y", "angle()", "Y", dataset8,
            PlotOrientation.VERTICAL, false, false, false);

    ChartPanel panel1 = new ChartPanel(chart1);
    ChartPanel panel2 = new ChartPanel(chart2);
    ChartPanel panel3 = new ChartPanel(chart3);
    ChartPanel panel4 = new ChartPanel(chart4);
    ChartPanel panel5 = new ChartPanel(chart5);
    ChartPanel panel6 = new ChartPanel(chart6);
    ChartPanel panel7 = new ChartPanel(chart7);
    ChartPanel panel8 = new ChartPanel(chart8);

    JFrame frame = new JFrame("Chart");
    frame.setLayout(new GridLayout(3, 3, 0, 0));
    frame.add(panel1);
    frame.add(panel2);
    frame.add(panel3);
    frame.add(panel4);
    frame.add(panel5);
    frame.add(panel6);
    frame.add(panel7);
    frame.add(panel8);
    frame.pack();
    frame.setVisible(true);

    choosePoint = null;
}

From source file:analysis.postRun.PostRunWindow.java

/** Method which creates and returns a graph in a chartpanel.
 * //from  www .j  a va2  s.co  m
 * @param dSeries
 *             Which dataSeries to make a graph of.
 *       title
 *             Title for the graph.
 *      xTitle
 *             Title for the x axis.     
 *       yTitle
 *             Title for the y axis.
 *      legend
 *             Whether or not to include a legend - true if multiple series are to be shown.
 */
private ChartPanel getSChart(double[][][] dSeries, double[][][] err, String title, String xTitle, String yTitle,
        Boolean legend, Boolean percentage) {

    int seriesNum = dSeries.length;
    DefaultXYDataset temp = new DefaultXYDataset();
    for (int j = 0; j < seriesNum; j++) {
        temp.addSeries(j, dSeries[j]);
    }
    JFreeChart chart = ChartFactory.createXYLineChart(title, xTitle, yTitle, temp, PlotOrientation.VERTICAL,
            legend, true, false);

    if (percentage) {
        chart.getXYPlot().getRangeAxis().setRange(0.0, 100.0);
    }

    for (int i = 0; i < seriesNum; i++) {
        plotErrorBars(chart, dSeries[i], err[i]);
    }

    if (save) {
        try {
            //System.out.println("Saving charts.");
            ChartUtilities.saveChartAsPNG(
                    new File(currFile.substring(0, currFile.length() - 4) + title + "Chart"), chart, 1200, 800);
        } catch (IOException e) {
            System.err.println(e.getMessage());
            //e.printStackTrace();
        }
    }

    return new ChartPanel(chart);
}