Plot profiles of multiple ROI's on the same graph, with color coding for

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Plot profiles of multiple ROI's on the same graph, with color coding for

Sebastian Rhode-3
Hi,

I just saw the discussion about plotting multiple ROIs inside one plot. I
recently wrote a mcro for this. It only works with time lapse files which
have one color channel right now.

1) Open File and make sure it is a time lapse file
2) Open the ROI manger and draw up to 8 ROIs
3) start the macro and select the desired options (--> the Python only works
if you have pythonxy installed)

And here is the code:

Cheers, Sebi

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

// Author: Sebastian Rhode
// Date: 2011-04-26

version_number = 1.6;

// marco for plotting mutiple lines from up-to 8 ROIs inside one plot
// only works with time-lapse images
// does not work with image 5D format

// get title from active window
title_orig = getTitle();
selectWindow(title_orig);
imagedir = getInfo("image.directory")
imagefilename = getInfo("image.filename")
//print(imagedir);
print(imagedir + imagefilename);
// get dimension from original image
getDimensions(w,h,ch,sl,fr);
print("X :",w,"Y :",h,"CHANNELS :",ch,"SLICES :",sl,"FRAMES :",fr);

setBatchMode(true);
// create maximum & minmum intensity projetion
run("Z Project...", "start=1 stop="+toString(fr)+" projection=[Max
Intensity]");
getStatistics(areaMax, meanMax, minMax, maxMax);
selectWindow(title_orig);
run("Z Project...", "start=1 stop="+toString(fr)+" projection=[Min
Intensity]");
// determine the maximum pixel value to adjust the y-scaling of the plot
getStatistics(areaMin, meanMin, minMin, maxMin);
close();

Dialog.create("Multiple ROI Kinetics");
Dialog.addMessage("Version Number: " + toString(version_number,1));
Dialog.addNumber("Time per frame [ms]",1);
Dialog.addCheckbox("Plot Data Points", false);
Dialog.addNumber("Line Width for Lines",2);
Dialog.addNumber("Line Width for ROIs",2);
//Dialog.addCheckbox("Inculde Min & Max in result table", false);
Dialog.addCheckbox("Save Results as TXT-File", false);
Dialog.addCheckbox("Save Results as XLS-File", false);
Dialog.addCheckbox("Show Results in Python - MatPlotLib", false);

Dialog.show();
timeframe = Dialog.getNumber();
plotpoints = Dialog.getCheckbox();
lw_plot = Dialog.getNumber();
lw_roi = Dialog.getNumber();
//minmax = Dialog.getCheckbox();
savetxt = Dialog.getCheckbox();
savexls = Dialog.getCheckbox();
openmpl = Dialog.getCheckbox();

run("Set Measurements...", "  mean display redirect=None decimal=3");
//if (minmax == true){
//    run("Set Measurements...", "  mean min display redirect=None
decimal=3");
//    }
//else if (minmax == false){
//    run("Set Measurements...", "  mean display redirect=None
decimal=3");
//    }

// specify plot dimensions
run("Profile Plot Options...", "width=600 height=400 minimum=0 maximum=0
draw");

numROI = roiManager("Count");
//print("NumROI :  ",numROI);
if (numROI >= 9) {
    showMessage("Error Message","Too many ROIs - only 8 are possible ...");
    exit();
    }

frames = newArray(fr);
roi1  = newArray(fr); // ROI number 1
roi2  = newArray(fr);
roi3  = newArray(fr);
roi4  = newArray(fr);
roi5  = newArray(fr);
roi6  = newArray(fr);
roi7  = newArray(fr);
roi8  = newArray(fr);

//lb =
newArray("Mean(ROI001)","Mean(ROI002)","Mean(ROI003)","Mean(ROI004)","Mean(ROI005)","Mean(ROI006)","Mean(ROI007)","Mean(ROI008)");
lb =
newArray("Mean1","Mean2","Mean3","Mean4","Mean5","Mean6","Mean7","Mean8");

// create color list for ROIs
List.set("1","red"); // color for ROI 1
List.set("2","green");
List.set("3","blue");
List.set("4","black");
List.set("5","magenta");
List.set("6","orange");
List.set("7","cyan");
List.set("8","yellow");

// adjust color properties for all ROIs
for (i=1; i<=numROI; i++) {
    roiManager("Select", i-1);
    colorvalue = List.get(toString(i));
    roiManager("Set Color", colorvalue);
    roiManager("Set Line Width", lw_roi);
    }

roiManager("Deselect");
roiManager("MultiMeasure");

// create array containing the frame numbers
for (i=1; i<=fr; i++) {
    frames[i-1] = i * timeframe;
    //setResult("Time", i-1, i * timeframe);
    setResult("Time", i-1, frames[i-1]);
    }

//test = getResultLabel(3);
//print("Testlabel = :",test);

for (i=1; i<=fr; i++) {
    if (numROI == 1) {
        roi1[i-1] = getResult(lb[0],i-1);
        }
    if (numROI == 2) {
        roi1[i-1] = getResult(lb[0],i-1);
        roi2[i-1] = getResult(lb[1],i-1);
        }
    if (numROI == 3) {
        roi1[i-1] = getResult(lb[0],i-1);
        roi2[i-1] = getResult(lb[1],i-1);
        roi3[i-1] = getResult(lb[2],i-1);
        }
    if (numROI == 4) {
        roi1[i-1] = getResult(lb[0],i-1);
        roi2[i-1] = getResult(lb[1],i-1);
        roi3[i-1] = getResult(lb[2],i-1);
        roi4[i-1] = getResult(lb[3],i-1);
        }
    if (numROI == 5) {
        roi1[i-1] = getResult(lb[0],i-1);
        roi2[i-1] = getResult(lb[1],i-1);
        roi3[i-1] = getResult(lb[2],i-1);
        roi4[i-1] = getResult(lb[3],i-1);
        roi5[i-1] = getResult(lb[4],i-1);
        }
    if (numROI == 6) {
        roi1[i-1] = getResult(lb[0],i-1);
        roi2[i-1] = getResult(lb[1],i-1);
        roi3[i-1] = getResult(lb[2],i-1);
        roi4[i-1] = getResult(lb[3],i-1);
        roi5[i-1] = getResult(lb[4],i-1);
        roi6[i-1] = getResult(lb[5],i-1);
        }
    if (numROI == 7) {
        roi1[i-1] = getResult(lb[0],i-1);
        roi2[i-1] = getResult(lb[1],i-1);
        roi3[i-1] = getResult(lb[2],i-1);
        roi4[i-1] = getResult(lb[3],i-1);
        roi5[i-1] = getResult(lb[4],i-1);
        roi6[i-1] = getResult(lb[5],i-1);
        roi7[i-1] = getResult(lb[6],i-1);
        }
    if (numROI == 8) {
        roi1[i-1] = getResult(lb[0],i-1);
        roi2[i-1] = getResult(lb[1],i-1);
        roi3[i-1] = getResult(lb[2],i-1);
        roi4[i-1] = getResult(lb[3],i-1);
        roi5[i-1] = getResult(lb[4],i-1);
        roi6[i-1] = getResult(lb[5],i-1);
        roi7[i-1] = getResult(lb[6],i-1);
        roi8[i-1] = getResult(lb[7],i-1);
        }
    }

// do the plots
Plot.create("Line Plot Test", "Frame Number / Time [ms]", "Mean Intensity
[cts]", frames, roi1);
Plot.setLimits(1, fr*timeframe*1.02, minMin*1.3, maxMax*0.7);
Plot.setLineWidth(lw_plot);
if (plotpoints == true) {
    Plot.add("Circle", frames, roi1);
    }
// ROI 2
if (numROI >= 2) {
    Plot.setColor(List.get(toString(2)));
    Plot.add("Line", frames, roi2);
    if (plotpoints == true) {
        Plot.add("Circle", frames, roi2);
        }
}
// ROI 3
if (numROI >= 3) {
    Plot.setColor(List.get(toString(3)));
    Plot.add("Line", frames, roi3);
    if (plotpoints == true) {
        Plot.add("Circle", frames, roi3);
    }
}
// ROI 4
if (numROI >= 4) {
    Plot.setColor(List.get(toString(4)));
    Plot.add("Line", frames, roi4);
    if (plotpoints == true) {
        Plot.add("Circle", frames, roi4);
    }
}
// ROI 5
if (numROI >= 5) {
    Plot.setColor(List.get(toString(5)));
    Plot.add("Line", frames, roi5);
    if (plotpoints == true) {
        Plot.add("Circle", frames, roi5);
    }
}
// ROI 6
if (numROI >= 6) {
    Plot.setColor(List.get(toString(6)));
    Plot.add("Line", frames, roi6);
    if (plotpoints == true) {
        Plot.add("Circle", frames, roi6);
    }
}
// ROI 7
if (numROI >= 7) {
    Plot.setColor(List.get(toString(7)));
    Plot.add("Line", frames, roi7);
    if (plotpoints == true) {
        Plot.add("Circle", frames, roi7);
    }
}
// ROI 8
if (numROI == 8) {
    Plot.setColor(List.get(toString(8)));
    Plot.add("Line", frames, roi8);
    if (plotpoints == true) {
        Plot.add("Circle", frames, roi8);
    }
}

// ROI 1
Plot.setColor(List.get(toString(1)));
// display the plot
Plot.show();
setBatchMode(false);

if (savetxt == true) {
       if (nResults==0) {
           exit("Results table is empty");
       }
       else {
           path = imagedir + imagefilename + "_Results.txt";
           //print(path);
           saveAs("Measurements", path);
       }
}

if (savexls == true) {
    // save contents of Results table in Excel
       if (nResults==0) {
           exit("Results table is empty");
       }
       else {
           path = imagedir + imagefilename + "_Results.xls";
           //print(path);
           saveAs("Measurements", path);
           //exec("cmd", "/c", "start", "excel.exe", "c:\\Results.xls");
       }
}

if (openmpl == true) {
       if (nResults==0) {
           exit("Results table is empty");
       }
       else {
           path = imagedir + imagefilename + "_Results.txt";
           saveAs("Measurements", path);
           exec("cmd", "/c","start", "python.exe", "c:/Dokumente und
Einstellungen/sebastian.rhode/Eigene
Dateien/Sebi/Projects_TILL/LA_Software/Online_Analysis/kinetics_FIJI.py",
"run");
       }
}



--
Dr. Sebastian Rhode
Grünwalder Str. 103a
81547 München
Tel: +49 89 4703091
Mobil: +49 15122810945
[hidden email]