我试图通过线性回归线通过共享相同斜率的各个单独的数据集群。然而,尽管我已经成功地为点绘制了不同的颜色,并且成功绘制了这些颜色,但是我在线上的尝试不起作用。通过不同的Y截距和X值绘制多条回归线
早些时候,我试图通过呼叫通过颜色的集群跑了HashSet的,但造成的问题与该行进来的顺序。
在这种尝试中,我试图通过一些连接到集群链接然后根据它调用线。
代码的第一部分并不真正相关,因为我没有更改任何内容,并且该部分按预期工作。它从其他课程中调用,但由于问题不在那里,我不认为显示其他课程将与我目前的问题相关。
我的代码的第二块是我迷路的地方。为什么它看起来好像不是编译?没有给出错误,它本质上被认为是一个幻影代码,就好像我的if语句没有被满足甚至初始化它?
下面是可能不相关的第一个块。第二块代码是我最关心的问题。对不起,我是这些论坛的新手,我并不完全确定提出问题的程序。
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) {
在下面此处的代码的部分,我试图创建用于通过数每个群集,其中在TreeSet中应模拟新的斜率线为它通过运行的线。但是,由于某种原因,就好像代码不存在一样。没有任何事情正在运行,我很好奇它是否与我可能错位的break语句有关?我试着在index ++之前移动它,并在它之后返回相同的结果。
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");
}
}
}
这里是图 Graph Result
如果这个方法未能解决您的问题,请编辑您的问题包括[MCVE]显示你目前的做法。 – trashgod