// These macros draw example graphs using the  
// macro language Plot.* functions.
// There is a JavaScript version at
//     http://imagej.nih.gov/ij/macros/js/ExamplePlots.js

    macro "Simple Plot" {
        yValues = newArray(0, 0.7, 2.3, 2.8, 1, 0.5);
        Plot.create("Simple Plot", "X", "Y", yValues);
        setJustification("center");
        Plot.addText("This is a line of centered text", 0.5, 0.5);
        setJustification("right");
        Plot.addText("This is a line of right justified text", 0.5, 0.7);
        setJustification("left");
        Plot.addText("This is a line of left justified text", 0.5, 0.9);
 }

     macro "Fancier Plot" {
        yValues = newArray(0, 0.7, 2.3, 2.8, 1, 0.5);
        Plot.create("Fancier Plot", "X", "Y");
        Plot.setLimits(0, 5, 0, 3);
        Plot.setLineWidth(2);
        Plot.setColor("lightGray");
        Plot.add("line", yValues);
        Plot.setColor("red");
        Plot.add("circles", yValues);
        Plot.show();
    }

     macro "Error Bars" {
        xValues = newArray(0.1, 0.25, 0.35, 0.5, 0.61,0.7,0.85,0.89,0.95);
        yValues = newArray(2,5.6,7.4,9,9.4,8.7,6.3,4.5,1);
        errorBars = newArray(0.8,0.6,0.5,0.4,0.3,0.5,0.6,0.7,0.8);
        Plot.create("Error Bars", "X", "Y", xValues, yValues);
        Plot.setLimits(0, 1, 0, 10);
        Plot.setLineWidth(2);
        Plot.add("error bars", errorBars);
        Plot.show();
    }

    macro "Scatter Plot" {
        n = 5000;
        x = newArray(n);
        y = newArray(n);
        for (i=0; i<n; i++) {
            x[i] = i+n/3*(random()-0.5);
            y[i] = i+n/3*(random()-0.5);
        }
        Plot.create("Scatter Plot", "X", "Y");
        Plot.setLimits(0, n, 0, n);
        Plot.add("dots", x, y);
  }

   macro "Animated Plot" {
        n = 100;
        loops = 100;
        x = newArray(n);
        for (i=0; i<n; i++)
            x[i] = i;
        y = newArray(n);
        for (i=0; i<loops; i++) {
            for (j=0; j<n; j++)
                y[j] += random()-0.5;
             for (j=1; j<n-1; j++)
                y[j] = (y[j-1]+y[j]+y[j+1])/3; // smooth
            Plot.create("Animated Plot", "X", "Y", x, y);
            Plot.setLimits(0, n-1, -3, 3);
            setJustification("center");
            Plot.addText("Plot # "+(i+1), 0.5, -0.01);
            Plot.update();
        }
    }