Plotten mehrerer Regressionsgeraden durch verschiedene Y-Abschnitte und X-Werte

Ich versuche, eine lineare Regressionslinie durch einzelne separate Datencluster zu ziehen, die dieselbe Steigung aufweisen. Obwohl ich erfolgreich unterschiedliche Farben für die Punkte selbst geplottet und diese erfolgreich grafisch dargestellt habe, funktioniert mein Versuch, die Linie zu zeichnen, nicht.

Vorher habe ich ein Hashset ausprobiert, das die Cluster nach Farben aufrief, aber Probleme mit der Reihenfolge verursachte, in der die Zeilen eingingen.

Bei diesem Versuch habe ich versucht, die Cluster über einen Nummernanhang zu verknüpfen und dann die darauf basierenden Zeilen aufzurufen.

Der erste Teil des Codes ist nicht wirklich relevant, da ich dort nichts geändert habe und dieser Teil wie vorgesehen funktioniert. Es wird von anderen Klassen aufgerufen, aber da das Problem nicht vorhanden ist, glaube ich nicht, dass das Anzeigen der anderen Klassen für mein aktuelles Problem relevant ist.

Der zweite Block meines Codes ist, wo ich verloren bin. Warum scheint es so, als würde es nicht kompiliert? Es wird kein Fehler angegeben und es wird im Wesentlichen nur als Phantomcode betrachtet, als ob meine if-Anweisung nicht erfüllt wird, um sie überhaupt zu initialisieren?

Below ist der erste Block, der möglicherweise nicht relevant ist. Der zweite Codeblock ist mein größeres Anliegen. Es tut mir leid, dass ich neu in diesen Foren bin. Ich bin mir nicht ganz sicher, wie eine Frage gestellt werden soll.

package clusters;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
import java.util.HashSet;
import java.util.TreeSet;

import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CrosshairState;
import org.jfree.chart.plot.FastScatterPlot;
import org.jfree.chart.plot.PlotRenderingInfo;
import org.jfree.ui.RectangleEdge;

public class ExtendedFastScatterPlot extends FastScatterPlot {

    /**
    *
    */
    private static final long serialVersionUID = 1L;

    int[] sizes;
    Paint[] colors;
    int[] shapes;

    public ExtendedFastScatterPlot(float[][] data, NumberAxis domainAxis, NumberAxis rangeAxis, int[] sizes,
            Paint[] colors, int[] shapes) {
        super(data, domainAxis, rangeAxis);
        this.sizes = sizes;
        this.colors = colors;
        this.shapes = shapes;
    }

    @Override
    public void render(Graphics2D g2, Rectangle2D dataArea, PlotRenderingInfo info, CrosshairState crosshairState) {
        // g2.setPaint(Color.BLUE);

        if (this.getData() != null) {
            for (int i = 0; i < this.getData()[0].length; i++) {
                float x = this.getData()[0][i];
                float y = this.getData()[1][i];
                int size = this.sizes[i];
                int transX = (int) this.getDomainAxis().valueToJava2D(x, dataArea, RectangleEdge.BOTTOM);
                int transY = (int) this.getRangeAxis().valueToJava2D(y, dataArea, RectangleEdge.LEFT);
                g2.setPaint(this.colors[i]);
                if (1 == this.shapes[i]) {
                    g2.fillRect(transX, transY, size, size);
                } else {
                    g2.fillOval(transX, transY, size, size);
                }
            }
        }
        g2.setColor(java.awt.Color.red);

        try {
            double[] lineData = GaussianElimination.calcLines();

            /*HashSet<Paint> paints = new HashSet<Paint>();
            for (Paint p : colors) {
                paints.add(p);
            }*/

            for (int index = 1; index < lineData.length; index++) {
            double slope = lineData[0];

            //for (Paint p : paints) {

Im folgenden Teil des Codes habe ich versucht, für jeden Cluster eine Linie nach der Nummer zu erstellen, in der im Baumsatz neue Steigungslinien simuliert werden sollen, damit sie durchlaufen werden. Aus irgendeinem Grund ist es jedoch so, als ob der Code nicht existiert. Nichts läuft und ich bin gespannt, ob es etwas mit der break-Anweisung zu tun hat, die ich möglicherweise verlegt habe? Ich habe versucht, es vor dem Index ++ und danach zu verschieben, und beide haben die gleichen Ergebnisse zurückgegeben.

                for (int i = 0; i < this.getData()[0].length; i++) {

                    TreeSet<Double> xCoords = new TreeSet<Double>();
                    //if (colors[i].equals(p)) {
                        xCoords.add((double) this.getData()[0][i]);
                    //}
                //}
                double xleft = xCoords.first();
                double xright = xCoords.last();

                double yleft = slope * xleft + lineData[index];
                double yright = slope * xright + lineData[index];


                int txstart = (int) this.getDomainAxis().valueToJava2D(xleft, dataArea, RectangleEdge.BOTTOM);
                int tystart = (int) this.getRangeAxis().valueToJava2D(yleft, dataArea, RectangleEdge.LEFT);

                int txend = (int) this.getDomainAxis().valueToJava2D(xright, dataArea, RectangleEdge.BOTTOM);
                int tyend = (int) this.getRangeAxis().valueToJava2D(yright, dataArea, RectangleEdge.LEFT);

                g2.setPaint(Color.getHSBColor(i/(lineData.length - 1), 1, 1 ));
                g2.drawLine(txstart, tystart, txend, tyend);

                //index++;
                //if (index >= lineData.length) break;
                }   
            }**

        } catch (IOException e) {
            System.out.println("Unable to open data files");
        }
    }
}

Hier ist der GraphGraph Result

Antworten auf die Frage(2)

Ihre Antwort auf die Frage