List of usage examples for org.jfree.data.xy XYSeries toArray
public double[][] toArray()
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]); }