Example usage for org.jfree.data.xy XYSeries toArray

List of usage examples for org.jfree.data.xy XYSeries toArray

Introduction

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

Prototype

public double[][] toArray() 

Source Link

Document

Returns a new array containing the x and y values from this series.

Usage

From source file:com.bwc.ora.models.Lrp.java

/**
 * Get the local maximums from a collection of Points.
 *
 * @param lrpSeries/*from ww  w. jav a  2s . c  om*/
 * @param seriesTitle
 * @return
 */
public static XYSeries getMaximumsWithHiddenPeaks(XYSeries lrpSeries, String seriesTitle) {
    XYSeries maxPoints = new XYSeries(seriesTitle);

    //convert to x and y coordinate arrays
    double[][] xyline = lrpSeries.toArray();

    //use a spline interpolator to converts points into an equation
    UnivariateInterpolator interpolator = new SplineInterpolator();
    UnivariateFunction function = interpolator.interpolate(xyline[0], xyline[1]);

    // create a differentiator using 5 points and 0.01 step
    FiniteDifferencesDifferentiator differentiator = new FiniteDifferencesDifferentiator(5, 0.01);

    // create a new function that computes both the value and the derivatives
    // using DerivativeStructure
    UnivariateDifferentiableFunction completeF = differentiator.differentiate(function);

    // now we can compute the value and its derivatives
    // here we decided to display up to second order derivatives,
    // because we feed completeF with order 2 DerivativeStructure instances
    //find local minima in second derivative, these indicate the peaks (and hidden peaks)
    //of the input
    for (double x = xyline[0][0] + 1; x < xyline[0][xyline[0].length - 1] - 1; x += 0.5) {
        DerivativeStructure xDSc = new DerivativeStructure(1, 2, 0, x);
        DerivativeStructure xDSl = new DerivativeStructure(1, 2, 0, x - 0.5);
        DerivativeStructure xDSr = new DerivativeStructure(1, 2, 0, x + 0.5);
        DerivativeStructure yDSc = completeF.value(xDSc);
        DerivativeStructure yDSl = completeF.value(xDSl);
        DerivativeStructure yDSr = completeF.value(xDSr);
        double c2d = yDSc.getPartialDerivative(2);
        if (c2d < yDSl.getPartialDerivative(2) && c2d < yDSr.getPartialDerivative(2)) {
            maxPoints.add((int) Math.round(x), yDSc.getValue());
        }
    }

    return maxPoints;
}

From source file:org.fhcrc.cpl.viewer.mrm.Utils.java

public static float[][] XYSeriesToArray(XYSeries xys) {
    /*/*  www.j  a  v a2  s  . co m*/
           float retval[][] = null;
           if(xys == null) return retval;
           int itemCount = xys.getItemCount();
           retval = new float[2][itemCount];
           for (int i = 0; i < itemCount; i++) {
              retval[0][i] = xys.getX(i).floatValue();
              Number y = xys.getY(i);
              if (y != null) {
     retval[1][i] = y.floatValue();
              }  else {
     retval[1][i] = Float.NaN;
              }
           }
    */ double tmp[][] = xys.toArray();
    float retval[][] = new float[2][tmp[0].length];
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < tmp[0].length; j++)
            retval[i][j] = (float) tmp[i][j];
    return retval;
}

From source file:org.jfree.data.xy.XYSeriesTest.java

/**
 * Some checks for the toArray() method.
 *///  w  w  w. j a  v a  2  s.co m
@Test
public void testToArray() {
    XYSeries s = new XYSeries("S1");
    double[][] array = s.toArray();
    assertEquals(2, array.length);
    assertEquals(0, array[0].length);
    assertEquals(0, array[1].length);

    s.add(1.0, 2.0);
    array = s.toArray();
    assertEquals(1, array[0].length);
    assertEquals(1, array[1].length);
    assertEquals(2, array.length);
    assertEquals(1.0, array[0][0], EPSILON);
    assertEquals(2.0, array[1][0], EPSILON);

    s.add(2.0, null);
    array = s.toArray();
    assertEquals(2, array.length);
    assertEquals(2, array[0].length);
    assertEquals(2, array[1].length);
    assertEquals(2.0, array[0][1], EPSILON);
    assertTrue(Double.isNaN(array[1][1]));
}

From source file:org.jfree.data.xy.XYSeriesTest.java

/**
 * Some checks for an example using the toArray() method.
 *///  w w  w.  j a  v a2 s  . c om
@Test
public void testToArrayExample() {
    XYSeries s = new XYSeries("S");
    s.add(1.0, 11.0);
    s.add(2.0, 22.0);
    s.add(3.5, 35.0);
    s.add(5.0, null);
    DefaultXYDataset dataset = new DefaultXYDataset();
    dataset.addSeries("S", s.toArray());
    assertEquals(1, dataset.getSeriesCount());
    assertEquals(4, dataset.getItemCount(0));
    assertEquals("S", dataset.getSeriesKey(0));
    assertEquals(1.0, dataset.getXValue(0, 0), EPSILON);
    assertEquals(2.0, dataset.getXValue(0, 1), EPSILON);
    assertEquals(3.5, dataset.getXValue(0, 2), EPSILON);
    assertEquals(5.0, dataset.getXValue(0, 3), EPSILON);
    assertEquals(11.0, dataset.getYValue(0, 0), EPSILON);
    assertEquals(22.0, dataset.getYValue(0, 1), EPSILON);
    assertEquals(35.0, dataset.getYValue(0, 2), EPSILON);
    assertTrue(Double.isNaN(dataset.getYValue(0, 3)));
}

From source file:org.openscience.cdk.applications.taverna.basicutilities.ChartTool.java

/**
 * Creates a residue plot./* w w w .j  a va 2 s .c o m*/
 * 
 * @param yValues
 * @param header
 * @param xAxis
 * @param yAxis
 * @param seriesNames
 * @return
 */
public JFreeChart createResiduePlot(List<Double[]> yValues, String header, String xAxis, String yAxis,
        List<String> seriesNames) {
    LinkedList<XYLineAnnotation> lines = new LinkedList<XYLineAnnotation>();
    DefaultXYDataset xyDataSet = new DefaultXYDataset();
    for (int j = 0; j < yValues.size(); j++) {
        XYSeries series = new XYSeries(seriesNames.get(j));
        for (int i = 0; i < yValues.get(j).length; i++) {
            series.add(i + 1, yValues.get(j)[i]);
            float dash[] = { 10.0f };
            BasicStroke stroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f,
                    dash, 0.0f);
            XYLineAnnotation annotation = new XYLineAnnotation(i + 1, 0, i + 1, yValues.get(j)[i], stroke,
                    Color.BLUE);
            lines.add(annotation);
        }
        xyDataSet.addSeries(seriesNames.get(j), series.toArray());
    }
    JFreeChart chart = ChartFactory.createScatterPlot(header, xAxis, yAxis, xyDataSet, PlotOrientation.VERTICAL,
            true, false, false);
    XYPlot plot = (XYPlot) chart.getPlot();
    plot.setNoDataMessage("NO DATA");
    plot.setDomainZeroBaselineVisible(true);
    plot.setRangeZeroBaselineVisible(true);
    for (int i = 0; i < lines.size(); i++) {
        plot.addAnnotation(lines.get(i));
    }
    XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
    renderer.setSeriesOutlinePaint(0, Color.black);
    renderer.setUseOutlinePaint(true);
    NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
    domainAxis.setAutoRangeIncludesZero(false);
    domainAxis.setTickMarkInsideLength(2.0f);
    domainAxis.setTickMarkOutsideLength(0.0f);

    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setTickMarkInsideLength(2.0f);
    rangeAxis.setTickMarkOutsideLength(0.0f);

    return chart;
}

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

@Override
public void work() throws Exception {
    // Get input/*from   w  ww .  ja  v  a 2s .com*/
    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]);
}