gpt4 book ai didi

java - 向 JavaFX 折线图添加不连续点

转载 作者:行者123 更新时间:2023-11-30 10:12:06 25 4
gpt4 key购买 nike

你好,

我的问题

我正在编写一个使用折线图的 JavaFX 应用程序。我想添加在折线图上创建不连续点的功能。我想这样做,以便当我的程序从数据库中读取数据时,它会打破部分数据丢失的行。在我的程序当前形式中,图形看起来像 this .我从 this 获得了以下代码在 SO 上发布,我一直在尝试对其进行调整以适应我的程序的需要。

package application;

import java.util.Arrays;
import java.util.List;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.Axis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.XYChart.Data;
import javafx.scene.chart.XYChart.Series;
import javafx.scene.shape.Circle;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;


public class Main extends Application {
@Override
public void start(Stage primaryStage) {

NumberAxis xAxis = new NumberAxis();
NumberAxis yAxis = new NumberAxis();
MyLineChart chart = new MyLineChart(xAxis, yAxis, Arrays.asList(5));


XYChart.Series<Number, Number> serie = new Series<>();

serie.getData().add(new Data<Number, Number>(0, 5));
serie.getData().add(new Data<Number, Number>(1, 5));
serie.getData().add(new Data<Number, Number>(2, 5));
serie.getData().add(new Data<Number, Number>(3, 5));
serie.getData().add(new Data<Number, Number>(4, 5));
serie.getData().add(new Data<Number, Number>(5, -5));
serie.getData().add(new Data<Number, Number>(6, -5));
serie.getData().add(new Data<Number, Number>(7, -5));

chart.getData().add(serie);

Path p = (Path) serie.getNode();

Scene scene = new Scene(chart,400,400);
primaryStage.setScene(scene);
primaryStage.show();



}

public static void main(String[] args) {
launch(args);
}

private static class MyLineChart extends LineChart<Number,Number>{


private List<Integer> breakpointIndex;

public MyLineChart(Axis<Number> xAxis, Axis<Number> yAxis, List<Integer> breakpointIndex) {
super(xAxis, yAxis);
this.breakpointIndex = breakpointIndex;
}

@Override
protected void layoutPlotChildren() {
super.layoutPlotChildren();

Path p = (Path) getData().get(0).getNode();

breakpointIndex.forEach(i ->{

Data<Number, Number> discontinuousPoint = getData().get(0).getData().get(i+1);
p.getElements().add(i+1, new MoveTo(getXAxis().getDisplayPosition( discontinuousPoint.getXValue()), getYAxis().getDisplayPosition(discontinuousPoint.getYValue())));

});

System.out.println("\nnew Path :");
p.getElements().forEach(e -> System.out.println("p : " + e));


}

}
}

这段代码在上面的形式中工作得很好,但它没有正确显示多个不连续点。我拍了screenshot当我将以下代码添加到上述程序时的输出结果:

MyLineChart chart = new MyLineChart(xAxis, yAxis, Arrays.asList(5, 7)); //added 7 to the array
.....
serie.getData().add(new Data<Number, Number>(8, 7));

我做了什么

我曾尝试删除出现不连续性的元素,但这会导致图形的某些部分没有通过点的线。这个结果可以看here .

我还在我的应用程序中添加了上面的代码(对数据类型进行了一些修改),我得到了 this结果。

最佳答案

也许您可以将不连续的线建模为两个或多个线段?绘图例程不知道不连续性,并将假定您作为一组提供的所有数据点都是连接的。

我会考虑创建一个更高级别的对象,其中包含零个或多个数据系列,每个数据系列在图表上表示为单独的“线”。更高级别的对象将负责设置其包含的线的外观,以便所有线段看起来相同(颜色、线型、数据点符号)。用户会将其解释为具有不连续性的单行。

关于java - 向 JavaFX 折线图添加不连续点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52056633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com