Duvida sobre Jfrechart

E ai galera.
sou meio novato no Jfreechart, e preciso desenvolver uma aplicação para o meu trabalho, estou usando o grafico do tipo
XYsplinerenderer, que dado os pontos traça uma reta pelos, o problema é o seguinte tenho q encontrar
o menor ponto no grafico em relação ao eixo X, mas pelo fato do jfreechart traçar uma reta que passa pelos pontos, as vezes
essa reta cruza abaixo do menor ponto que eu plotei no grafico, e é esse ponto mais baixo que eu quero, ou seja o menor ponto
do grafico por onde a reta(ou curva) passa, pois o menor ponto que eu informo eu consigo obter mas não é esse que eu quero.

vou postar aqui o codogo que eu usso para gerar o grafico.

[code]import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYSplineRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class GeraGrafico {

public static void Grafico(ArrayList<String> energia, ArrayList<String> volume, ArrayList<String> energia_nm, ArrayList<String> volume_nm) {
    XYSeriesCollection dataset = new XYSeriesCollection();
    XYSeriesCollection dataset1 = new XYSeriesCollection();
    Double menorx, menory;
    String[] categorias = new String[]{"FM", "NM"};
    // XYSeries serie1 = new XYSeries("");
   /* float fator = 0;
    fator = 100 / 210;*/
    for (int i = 0; i < categorias.length; i++) // while ()
    {
        XYSeries serie = new XYSeries(categorias[i]);
        XYSeries serie1 = new XYSeries(categorias[i]);
        serie.setMaximumItemCount(100);
        serie1.setMaximumItemCount(350);
        // Altura
        if (i == 0) {
            // serie.add(0, 0);
            for (int cont = 0; cont < energia.size(); cont++) {
                serie.add(Double.parseDouble(volume.get(cont)), Double.parseDouble(energia.get(cont)));
            }
        }
        if (i == 1) {
            for (int cont = 0; cont < energia_nm.size(); cont++) {
                serie.add(Double.parseDouble(volume_nm.get(cont)), Double.parseDouble(energia_nm.get(cont)));
            }
        //serie.add(0, 0);

        }
        dataset.addSeries(serie);
    //dataset1.addSeries(serie1);
    }

    // dataset1.addSeries(serie1);

    ValueAxis axis1 = new NumberAxis("Volume");
    ValueAxis axis2 = new NumberAxis("Energia");

    XYSplineRenderer renderer = new XYSplineRenderer();
    XYSplineRenderer renderer1 = new XYSplineRenderer();
    renderer.setSeriesPaint(0, Color.BLUE);
    renderer1.setSeriesPaint(1, Color.GREEN);

    renderer.getBaseOutlinePaint();
    XYPlot plot = new XYPlot(dataset, axis1, axis2, renderer);
    //XYPlot plot1 = new XYPlot(dataset1, axis1, axis3, renderer1);
    // XYPlot plot1 = new XYPlot(dataset, axis1, axis3, renderer1);
    //   plot1.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);

        plot.getQuadrantOrigin();

    plot.setRangeAxis(2, axis2);
    plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
    // plot1.setRangeAxis(2, axis2);
    //plot.setRangeAxis(1, axis1);
    //  plot1.setRangeAxis(1, axis2);

    JFreeChart chart = new JFreeChart(plot);

    ChartPanel panel = new ChartPanel(chart);
    JFrame f = new JFrame("Grafico");
    f.setSize(640, 480);
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.getContentPane().add(panel);
    f.setVisible(true);
}

}
[/code]

se vcs puderem me ajudar fico grato [ESTOU PRECISANDO MUITO DISSO]

abraço