我有编码问题,我想绘制值(x和y)并计算线性回归并将其绘制在imageJ中。有人可以帮忙吗?
我试过这个
public class Plot implements PlugIn {
public void run(String arg) {
if (IJ.versionLessThan("1.27t"))
return;
float[] x = {0.375f, 0.75f, 1.5f, 2.25f, 3f,3.75f,4.5f,4.75f,5f};
// x-coordinates
float[] y = {123f,456f,5678f,4567f,4567f,5678f,2345f,4563f,2345f};
// y-coordinates
float[] e = {.8f,.6f,.5f,.4f,.3f,.5f,.6f,.7f,.8f};
// error bars
PlotWindow plot = new PlotWindow("Example Plot","x-axis","y-axis",x,y);
plot.setLimits(0, 5.5, 0, 6000);
plot.addErrorBars(e);
// add a second curve
float x2[] = {.4f,.5f,.6f,.7f,.8f};
float y2[] = {4,3,3,4,5};
int N=9;
double sumx = 0.0, sumy = 0.0, sumx2 = 0.0;
for (int i = 0; i < N; i++)
sumx += x[i];
for (int i = 0; i < N; i++)
sumx2 += x[i]*x[i];
for (int i = 0; i < N; i++)
sumy += y[i];
double xbar = sumx / N;
double ybar = sumy / N;
// second pass: compute summary statistics
double xxbar = 0.0, yybar = 0.0, xybar = 0.0;
for (int i = 0; i < N; i++) {
xxbar += (x[i] - xbar) * (x[i] - xbar);
yybar += (y[i] - ybar) * (y[i] - ybar);
xybar += (x[i] - xbar) * (y[i] - ybar);
}
slope = xybar / xxbar;
intercept = ybar - slope * xbar;
// more statistical analysis
double rss = 0.0; // residual sum of squares
double ssr = 0.0; // regression sum of squares
for (int i = 0; i < N; i++) {
double fit = slope*x[i] + intercept; //calculating fit
rss += (fit - y[i]) * (fit - y[i]);
ssr += (fit - ybar) * (fit - ybar); //calculating ssr
}
}
}
答案 0 :(得分:0)
以下Groovy script(与Java非常相似,可以直接从ImageJ中的Script editor运行)说明了如何使用ij.gui.Plot
和ij.measure.CurveFitter
类用回归线生成一个图:
import ij.gui.Plot
import ij.measure.CurveFitter
x = [0.375d, 0.75d, 1.5d, 2.25d, 3d,3.75d,4.5d,4.75d,5d];
// x-coordinates
y = [123d,456d,5678d,4567d,4567d,5678d,2345d,4563d,2345d];
// y-coordinates
plot = new Plot("Example Plot","x-axis","y-axis");
plot.addPoints(x,y,Plot.LINE)
plot.setLimits(0, 5.5, 0, 6000);
cf = new CurveFitter((double[]) x, (double[]) y)
cf.doFit(CurveFitter.STRAIGHT_LINE)
yfit = []
for (cx in x) {
yfit.add(cf.f(cx))
}
plot.addPoints(x, yfit, Plot.LINE)
plotwindow = plot.show()
一些建议:
Plot
,因为您的代码读者可能会将其与ij.gui.Plot
混淆。ij.gui.Plot
代替ij.gui.PlotWindow
;前者提供了更多功能。