Ejemplo n.º 1
0
  private void drawGraph(
      final double[] params, final double[] boxSizes, final double[] boxCountSums) {

    final int samples = 100;
    final float[] px = new float[samples];
    final float[] py = new float[samples];
    double[] a = Tools.getMinMax(boxSizes);
    final double xmin = a[0], xmax = a[1];

    a = Tools.getMinMax(boxCountSums);
    double ymin = a[0], ymax = a[1];
    final double inc = (xmax - xmin) / ((double) samples - 1);
    double tmp = xmin;

    for (int i = 0; i < samples; i++) {
      px[i] = (float) tmp;
      tmp += inc;
    }
    for (int i = 0; i < samples; i++) {
      py[i] = (float) CurveFitter.f(CurveFitter.STRAIGHT_LINE, params, px[i]);
    }
    a = Tools.getMinMax(py);
    ymin = Math.min(ymin, a[0]);
    ymax = Math.max(ymax, a[1]);
    final Plot plot = new Plot("Plot", "-log(box size)", "log(box count)", px, py);
    plot.setLimits(xmin, xmax * 0.9, ymin, ymax * 1.1);
    plot.draw();
    plot.addPoints(boxSizes, boxCountSums, Plot.CIRCLE);
    plot.addPoints(px, py, Plot.LINE);
    final CurveFitter cf = new CurveFitter(boxSizes, boxCountSums);
    cf.doFit(CurveFitter.STRAIGHT_LINE);
    plot.addLabel(
        0.1, 0.1, "Slope: " + IJ.d2s(params[1], 4) + "\n" + "R²: " + IJ.d2s(cf.getRSquared(), 4));
    final ImagePlus plotImage = new ImagePlus("Plot", plot.getProcessor());
    plotImage.show();
    return;
  }