public bool CreateGraphR(string fileName, bool show, int graphNum)
{
//only graph if there's data
//TODO: check also later if none row is selected
if(CurrentGraphData.XAxisNames.Count == 0) {
return false;
}
if (!show) { //report
string directoryName = Util.GetReportDirectoryName(fileName);
/*
string [] pngs = Directory.GetFiles(directoryName, "*.png");
//if found 3 images, sure will be 1.png, 2.png and 3.png, next will be 4.png
//there will be always a png with chronojump_logo
fileName = directoryName+"/"+pngs.Length.ToString() + ".png";
*/
fileName = directoryName+"/"+(graphNum+1).ToString() + ".png";
} else
fileName = Path.GetTempPath()+"/"+fileName;
//On win32 R understands backlash as an escape character and
//a file path uses Unix-like path separator '/'
fileName = fileName.Replace("\\","/");
string cexAxisString = "";
if(gRO.Type == Constants.GraphTypeBarplot || gRO.Type == Constants.GraphTypeLines)
cexAxisString = ", cex.axis=" + Util.ConvertToPoint(gRO.XAxisFontSize);
string rString = "";
if(UtilAll.IsWindows())
rString = "library(\"Cairo\")\n" +
"Cairo(" + gRO.Width + ", " + gRO.Height +
", file = '" + fileName + "', type=\"png\", bg=\"white\")\n";
else
rString = "png(filename = '" + fileName + "'\n" +
" , width = " + gRO.Width + ", height = " + gRO.Height + ", units = 'px'\n" +
" , pointsize = 12, bg = 'white', res = NA)\n";
rString += "par(mar=c(" + gRO.MarginBottom + "," + gRO.MarginLeft + "," +
gRO.MarginTop + "," + gRO.MarginRight + ")" + cexAxisString + ")\n";
if(gRO.Type == Constants.GraphTypeBoxplot) {
if(hasTwoAxis()) {
rString += "par(mfrow=c(1,2))\n";
rString += getRBoxplotString(
gRO, fileName, Sides.LEFT);
rString += getRBoxplotString(
gRO, fileName, Sides.RIGHT);
}
else
rString += getRBoxplotString(
gRO, fileName, Sides.ALL);
}
else if(gRO.Type == Constants.GraphTypeBarplot) {
if(hasTwoAxis()) {
rString += "par(mfrow=c(1,2))\n";
rString += getRBarplotString(
gRO, fileName, Sides.LEFT);
rString += getRBarplotString(
gRO, fileName, Sides.RIGHT);
}
else
rString += getRBarplotString(
gRO, fileName, Sides.ALL);
}
else if(gRO.Type == Constants.GraphTypeLines) {
if(hasTwoAxis()) {
rString += "par(mfrow=c(1,2))\n";
rString += getRLinesString(
gRO, fileName, Sides.LEFT);
rString += getRLinesString(
gRO, fileName, Sides.RIGHT);
}
else
rString += getRLinesString(
gRO, fileName, Sides.ALL);
}
else if(gRO.Type == Constants.GraphTypeStripchart) {
if(hasTwoAxis()) {
rString += "par(mfrow=c(2,1))\n";
rString += getRStripchartString(
gRO, fileName, Sides.LEFT);
rString += getRStripchartString(
gRO, fileName, Sides.RIGHT);
}
else
rString += getRStripchartString(
gRO, fileName, Sides.ALL);
}
else if(gRO.Type == Constants.GraphTypeXY)
rString += getRXYString(gRO, fileName);
else if(gRO.Type == Constants.GraphTypeHistogram)
rString += getRHistogramString(gRO, fileName);
else //if(CurrentGraphData.GraphType == Constants.GraphTypeDotchart))
rString += getRDotchartString(gRO, fileName);
rString += " dev.off()\n";
//fileName = System.IO.Path.Combine(Path.GetTempPath(), fileName);
string rScript = System.IO.Path.Combine(Path.GetTempPath(), graphNum+Constants.FileNameRScript);
TextWriter writer = File.CreateText(rScript);
writer.Write(rString);
writer.Flush();
writer.Close();
((IDisposable)writer).Dispose();
Util.RunRScript(rScript);
if(show) {
if(! File.Exists(fileName) || File.GetLastWriteTime(fileName) < File.GetLastWriteTime(rScript))
new DialogMessage(Constants.MessageTypes.WARNING,
Catalog.GetString("Sorry. Error doing graph.") +
"\n" + Catalog.GetString("Maybe R is not installed.") +
"\n" + Catalog.GetString("Please, install it from here:") +
"\n\nhttp://cran.cnr.berkeley.edu/bin/macosx/R-latest.pkg");
else
new DialogImageTest(Catalog.GetString("Chronojump Graph"), fileName, DialogImageTest.ArchiveType.FILE);
}
return true;
}