ImageJ动态绘图脚本

发布时间:2024年01月19日

动态绘图脚本

在ImageJ菜单栏Help->Examples中提供了许多示例脚本,在Plots下有一个Dynamic Plot的选项,其脚本运行结果如下。

在这里插入图片描述

下面对这段程序进行拆解,并进一步加深对ImageJ宏语言的理解。

数据准备

首先,外面有一个macro引起的花括号,表明这段程序是一个macro,即宏。

macro "Dynamic Plot" {
}

进入宏之后,首先是一些基础的数据准备

close("*_", "keep");
close("*_.ijm", "keep");
left = 0;   right = 4;
bottom = 0; top = 1.6;

nPoints = 50;
range = right - left;
Plot.create("Dynamic Plot", "X", "Y");
Plot.setLimits(left, right, bottom, top );
Plot.setFrameSize(800, 500);
Plot.setFontSize(18);
xValues = newArray(nPoints);
yValues1 = newArray(nPoints);
yValues2 = newArray(nPoints);
yValues3 = newArray(nPoints);
sigma = 0.4; ampl = 1;   x0 = 2;

很显然,Plot是用于绘图的类,create则用于创建绘图坐标系,输入参数分别是图像名称和 x , y x,y x,y轴名称。

xValues是 x x x轴数据,随后定义了三组 y y y轴数据,分别对应图中的三个曲线,每一组数据均有50个点。

主循环

接下来进入图像的主循环,主要包括两层,内层是对每个点进行遍历,从而根据对应的点,来生成相应的数据。其中, y 1 , y 2 y_1,y_2 y1?,y2?是两个类似指数函数的函数, y 3 y_3 y3?则是 y 1 , y 2 y_1,y_2 y1?,y2?求和。

外层是对 d x \text dx dx值进行遍历,其功能就是不断地更改三组不同 y y y数据的位置,使之可以移动。

for(dx = -2; dx < 2; dx += 0.05){
   for (p = 0; p < nPoints; p++){
      x = p/(nPoints - 1) * range + left;
      y1 = ampl * exp(-pow(x - x0, 2)/(sigma * sigma * 2));
      y2 = 0.5 * ampl * exp(-pow(x -dx - x0, 2)/(sigma * sigma * 2));
      xValues[p] = x;
      yValues1[p] = y1;
      yValues2[p] = y2;
      yValues3[p] = y1 + y2;
   }
   Plot.setColor("#ccccff");
   Plot.add("filled", xValues, yValues3);
   Plot.drawGrid;
   Plot.setLineWidth(2);
   Plot.setColor("green");
   Plot.add("line", xValues, yValues1);
   Plot.setColor("red");
   Plot.add("line", xValues, yValues2);
   Plot.setLineWidth(1);
   txt = "dx = " + d2s(dx, 2);
   txt += "\n(use slider to change)";
   Plot.addText(txt, 0.77, 0.12);
   Plot.setLegend("Sum\nGauss1\nGauss2", "top-left");
   Plot.appendToStack;
}

在完成数据赋值之后,通过Plot中的add函数来添加数据点,并通过几组set函数,对曲线的外观进行调整

函数功能 y 1 y_1 y1? y 2 y_2 y2? y 3 y_3 y3?
setColor颜色#ccccff绿色红色
setLineWidth线宽21默认

最后,通过addText添加文字说明,用setLegend添加图例。

文章来源:https://blog.csdn.net/m0_37816922/article/details/135610227
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。