동일한 경사를 공유하는 개별 데이터 클러스터를 통해 선형 회귀 선을 통과하려고합니다. 그러나, 내가 성공적으로 포인트 자체에 대한 다른 색상을 음모하고 성공적으로 그 그래프를 만들었지 만, 라인에서 내 시도가 작동하지 않습니다.다른 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 문과 관련이 있다면 궁금합니다. 나는 인덱스 ++ 이전에 그것을 움직이려고 시도했다. 그리고 그것과 둘 다 같은 결과를 반환했다.
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
는, 현재의 접근 방식을 보여줍니다 A [mcve] 포함하도록 질문을 수정하시기 바랍니다. – trashgod