如何在javafx中绘制峰值贴图
我想在javafx中绘制一个峰值图,但是没有一个类来完成我的目标。所以我修改了“线形图”作为我的“峰值图”,看起来。但我想将X轴移动到0比例(y轴),我能做些什么来实现它 顺便说一下,如果你有更好的方法来实现“峰图”,请给我一些建议 谢谢如何在javafx中绘制峰值贴图,javafx,javafx-2,javafx-8,Javafx,Javafx 2,Javafx 8,我想在javafx中绘制一个峰值图,但是没有一个类来完成我的目标。所以我修改了“线形图”作为我的“峰值图”,看起来。但我想将X轴移动到0比例(y轴),我能做些什么来实现它 顺便说一下,如果你有更好的方法来实现“峰图”,请给我一些建议 谢谢 public void start(Stage stage) { stage.setTitle("Line Chart Sample"); final NumberAxis xAxis = new NumberAxis();
public void start(Stage stage) {
stage.setTitle("Line Chart Sample");
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("X");
yAxis.setLabel("Y");
final LineChart<Number, Number> lineChart = new LineChart<>(xAxis, yAxis);
lineChart.setTitle("Peak Map");
XYChart.Series<Number, Number> series1 = new XYChart.Series<>();
series1.setName("Portfolio 1");
series1.getData().add(new XYChart.Data<Number, Number>(1, 0));
series1.getData().add(new XYChart.Data<Number, Number>(1, 14));
XYChart.Series<Number, Number> series2 = new XYChart.Series<>();
series2.setName("Portfolio 2");
series2.getData().add(new XYChart.Data<Number, Number>(2, 0));
series2.getData().add(new XYChart.Data<Number, Number>(2, 34));
XYChart.Series<Number, Number> series3 = new XYChart.Series<>();
series3.setName("Portfolio 3");
series3.getData().add(new XYChart.Data<Number, Number>(3, 0));
series3.getData().add(new XYChart.Data<Number, Number>(3, 35));
XYChart.Series<Number, Number> series4 = new XYChart.Series<>();
series4.setName("Protfolio 4");
series4.getData().add(new XYChart.Data<>(2, 0));
series4.getData().add(new XYChart.Data<>(2, -8));
Scene scene = new Scene(lineChart, 800, 600);
lineChart.getData().addAll(series1, series2, series3, series4);
lineChart.setCreateSymbols(false);
lineChart.setLegendVisible(false);
stage.setScene(scene);
stage.show();
}
公共作废开始(阶段){
阶段。设置标题(“折线图样本”);
最终数字axis xAxis=新数字axis();
最终数字axis yAxis=新数字axis();
xAxis.setLabel(“X”);
yAxis.setLabel(“Y”);
最终线形图线形图=新线形图(xAxis,yAxis);
线形图。设置标题(“峰值地图”);
XYChart.Series系列1=新的XYChart.Series();
系列1.集合名称(“组合1”);
series1.getData().add(新的XYChart.Data(1,0));
series1.getData().add(新的XYChart.Data(1,14));
XYChart.Series系列2=新的XYChart.Series();
系列2.集合名称(“组合2”);
series2.getData().add(新的XYChart.Data(2,0));
series2.getData().add(新的XYChart.Data(2,34));
XYChart.Series系列3=新的XYChart.Series();
系列3.集合名称(“组合3”);
series3.getData().add(新的XYChart.Data(3,0));
series3.getData().add(新的XYChart.Data(3,35));
XYChart.Series系列4=新的XYChart.Series();
序列4.集合名(“第4组”);
series4.getData().add(新的XYChart.Data(2,0));
series4.getData().add(新的XYChart.Data(2,-8));
场景=新场景(线条图,800600);
lineChart.getData().addAll(系列1、系列2、系列3、系列4);
lineChart.setCreateSynumbles(false);
线形图。setLegendVisible(假);
舞台场景;
stage.show();
}
我玩了一下你的代码。你期待这样的结果吗?
警告:这真是一个棘手的解决方案
找到零水平线对象并将xAxis
移动到此位置:
final LineChart<Number, Number> lineChart = new LineChart<>(xAxis, yAxis);
final ObservableList<Node> lineChildren = lineChart.getChildrenUnmodifiable();
final Optional<Node> chartContent = lineChildren
.stream()
.filter(node -> node.getStyleClass().contains("chart-content"))
.findFirst();
if (chartContent.isPresent()) {
final Optional<Node> xyChart = ((Parent)chartContent.get())
.getChildrenUnmodifiable()
.stream()
.filter(node -> node.getStyleClass().isEmpty())
.findFirst();
if (xyChart.isPresent()) {
final Optional<Node> xAxisOrigin = ((Parent) xyChart.get())
.getChildrenUnmodifiable()
.stream()
.filter(node -> node.getStyleClass().contains("chart-horizontal-zero-line"))
.findFirst();
if (xAxisOrigin.isPresent()) {
final Line node = (Line) xAxisOrigin.get();
Platform.runLater(() -> {
xAxis.setTranslateY(-(xAxis.getLayoutY() - node.getEndY()));
});
}
}
}
最终线形图线形图=新线形图(xAxis,yAxis);
最终ObservableList lineChildren=lineChart.getChildrenUnmodifiable();
最终可选chartContent=lineChildren
.stream()
.filter(节点->节点.getStyleClass().contains(“图表内容”))
.findFirst();
if(chartContent.isPresent()){
最终可选xyChart=((父)chartContent.get())
.getChildrenUnmodifiable()
.stream()
.filter(节点->节点.getStyleClass().isEmpty())
.findFirst();
if(xyChart.isPresent()){
最终可选XaxiOrigin=((父)xyChart.get())
.getChildrenUnmodifiable()
.stream()
.filter(节点->节点.getStyleClass()包含(“图表水平零线”))
.findFirst();
if(xAxisOrigin.isPresent()){
最后一行节点=(行)xAxisOrigin.get();
Platform.runLater(()->{
setTranslateY(-(xAxis.getLayoutY()-node.getEndY());
});
}
}
}
至于我,X和Y标签可能会被删除
注意:我们需要处理窗口大小事件以动态移动
xAxis
。什么是峰值映射?你有解释它的链接吗?很抱歉,我不能给你一个确切的定义,因为它更像一个自定义图。但是看起来像。在图中,每个点(x1,y1)确定从(x1,0)到(x1,y1)的直线