// RBoxplot.java // // Author: // Antonio J. Nebro <antonio@lcc.uma.es> // Juan J. Durillo <durillo@lcc.uma.es> // // Copyright (c) 2011 Antonio J. Nebro, Juan J. Durillo // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. package jmetal.experiments.util; import jmetal.experiments.Experiment; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * Class for generating results in form of boxplots */ public class RBoxplot { /** * This method produces R scripts for generating eps files containing boxplots * of the results previosly obtained. The boxplots will be arranged in a grid * of rows x cols. As the number of problems in the experiment can be too high, * the @param problems includes a list of the problems to be plotted. * @param rows * @param cols * @param problems List of problem to plot * @param prefix Prefix to be added to the names of the R scripts * @throws java.io.FileNotFoundException * @throws java.io.IOException */ public static void generateScripts(int rows, int cols, String[] problems, String prefix, boolean notch, Experiment experiment) throws IOException { // STEP 1. Creating R output directory String rDirectory = "R"; rDirectory = experiment.experimentBaseDirectory_ + "/" + rDirectory; System.out.println("R : " + rDirectory); File rOutput; rOutput = new File(rDirectory); if (!rOutput.exists()) { new File( rDirectory).mkdirs(); System.out.println("Creating " + rDirectory + " directory"); } for (int indicator = 0; indicator < experiment.indicatorList_.length; indicator++) { System.out.println("Indicator: " + experiment.indicatorList_[indicator]); String rFile = rDirectory + "/" + prefix + "." + experiment.indicatorList_[indicator] + ".Boxplot.R"; FileWriter os = new FileWriter(rFile, false); os.write("postscript(\"" + prefix + "." + experiment.indicatorList_[indicator] + ".Boxplot.eps\", horizontal=FALSE, onefile=FALSE, height=8, width=12, pointsize=10)" + "\n"); //os.write("resultDirectory<-\"../data/" + experimentName_ +"\"" + "\n"); os.write("resultDirectory<-\"../data/" + "\"" + "\n"); os.write("qIndicator <- function(indicator, problem)" + "\n"); os.write("{" + "\n"); for (int i = 0; i < experiment.algorithmNameList_.length; i++) { os.write("file" + experiment.algorithmNameList_[i] + "<-paste(resultDirectory, \"" + experiment.algorithmNameList_[i] + "\", sep=\"/\")" + "\n"); os.write("file" + experiment.algorithmNameList_[i] + "<-paste(file" + experiment.algorithmNameList_[i] + ", " + "problem, sep=\"/\")" + "\n"); os.write("file" + experiment.algorithmNameList_[i] + "<-paste(file" + experiment.algorithmNameList_[i] + ", " + "indicator, sep=\"/\")" + "\n"); os.write( experiment.algorithmNameList_[i] + "<-scan(" + "file" + experiment.algorithmNameList_[i] + ")" + "\n"); os.write("\n"); } // for os.write("algs<-c("); for (int i = 0; i < experiment.algorithmNameList_.length - 1; i++) { os.write("\"" + experiment.algorithmNameList_[i] + "\","); } // for os.write("\"" + experiment.algorithmNameList_[ experiment.algorithmNameList_.length - 1] + "\")" + "\n"); os.write("boxplot("); for (int i = 0; i < experiment.algorithmNameList_.length; i++) { os.write( experiment.algorithmNameList_[i] + ","); } // for if (notch) { os.write("names=algs, notch = TRUE)" + "\n"); } else { os.write("names=algs, notch = FALSE)" + "\n"); } os.write("titulo <-paste(indicator, problem, sep=\":\")" + "\n"); os.write("title(main=titulo)" + "\n"); os.write("}" + "\n"); os.write("par(mfrow=c(" + rows + "," + cols + "))" + "\n"); os.write("indicator<-\"" + experiment.indicatorList_[indicator] + "\"" + "\n"); for (String problem : problems) { os.write("qIndicator(indicator, \"" + problem + "\")" + "\n"); } os.close(); } // for } // generateRBoxplotScripts }