【问题标题】:How to plot multiple series with javafx line chart which is in array list如何使用数组列表中的 javafx 折线图绘制多个系列
【发布时间】:2017-06-13 05:40:56
【问题描述】:

没有错误,但绘图存在问题,没有得到正确的折线图,我想要 x 轴上的参数和 y 轴上的值,但我有 3 个引擎作为系列,但系列是不加,但最后一个系列只是加起来。请帮我解决这个问题。

我想要做的是:假设我有 n 个引擎和 m 个引擎参数,如果我有 4 个引擎和 30 个参数,那么总值将为 n x m,即 4x30=120,所以我想将引擎绘制在一个轴和另一个参数。现在我将引擎作为系列,但无法根据参数绘制它。应该有多个引擎系列和带有绘制值的常量参数

Click this url to see the plot. Am getting something like this, as am not able to add multiple series.

1:性能.java

import java.util.ArrayList;
import java.util.List;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.XYChart;

public class performance {

protected LineChart<String,Number> lineChart;
protected ArrayList parameters;
protected ArrayList<List> param;
protected ArrayList engines;
public XYChart.Series series = new XYChart.Series();



public performance(LineChart<String,Number> lineChart, ArrayList parameters, ArrayList<List> paramValues, ArrayList engines) {
    this.lineChart = lineChart;
    this.parameters = parameters;
    this.param = paramValues;
    this.engines = engines;

}

public XYChart.Series generateChart() {

    for(int i=0;i<engines.size();i++)
    {

        series.setName(engines.get(i).toString());

        for(int j=0;j<parameters.size();j++)
        {

    series.getData().add(new XYChart.Data(parameters.get(j).toString(),param.get(i).get(j)));

    System.out.println(engines.get(i) + "with parameter: " + parameters.get(j) + "having value: "+ param.get(i).get(j));

        }
    }
    System.out.println(lineChart);



    return series;
}

}

2:主类

import java.util.ArrayList;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.stage.Stage;

public class NewFXMain extends Application {

@Override 
public void start(Stage stage) {

    stage.setTitle("Performance Analysis");

    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();

    xAxis.setLabel("Values");
    yAxis.setLabel("Engines");

    LineChart<String, Number> lineChart = new LineChart<String,Number>(xAxis,yAxis);

    Scene scene  = new Scene(lineChart,800,600); 

    lineChart.setTitle("Performance Analysis");

    ArrayList engines = new ArrayList();
     engines.add("engine1");
     engines.add("engine2");
     engines.add("engine3");
     ArrayList parameters = new ArrayList();
     parameters.add("parameter1");
     parameters.add("parameter2");
     parameters.add("parameter3");
     parameters.add("parameter4");
     parameters.add("parameter5");
     ArrayList paramvalue1 = new ArrayList();
     paramvalue1.add(12);
     paramvalue1.add(13);
     paramvalue1.add(15);
     paramvalue1.add(11);
     paramvalue1.add(10);


    ArrayList paramvalue2 = new ArrayList();
     paramvalue2.add(12);
     paramvalue2.add(20);
     paramvalue2.add(18);
     paramvalue2.add(17);
     paramvalue2.add(22);
     ArrayList paramValue3 = new ArrayList();
     paramValue3.add(14);
     paramValue3.add(12);
     paramValue3.add(11);
     paramValue3.add(22);
     paramValue3.add(12);
     ArrayList finalValue = new ArrayList();
     finalValue.add(paramvalue1);
     finalValue.add(paramvalue2);
     finalValue.add(paramValue3);

     for(int i=0;i<engines.size();i++)
       {
        performance performvalues = new performance(lineChart, parameters, finalValue, engines);

        lineChart.getData().add(performvalues.generateChart());
       }

    stage.setScene(scene);
    stage.show();
}    

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

【问题讨论】:

    标签: java javafx plot javafx-2 javafx-8


    【解决方案1】:

    更改performance 类的generateChart

    public void generateChart() {
        for (int i = 0; i < engines.size(); i++) {
            XYChart.Series series = new XYChart.Series();
            series.setName(engines.get(i).toString());
            for (int j = 0; j < parameters.size(); j++) {
                series.getData().add(new XYChart.Data(parameters.get(j).toString(), param.get(i).get(j)));
            }
            lineChart.getData().add(series);
        }
        System.out.println(lineChart);
    }
    

    并使用NewFXMain 类的start 方法中的类,如下所示,并删除for循环

    performance performvalues = new performance(lineChart, parameters, finalValue, engines);
    performvalues.generateChart();
    

    注意:始终保持类名 CamelCase

    【讨论】:

    • 非常感谢@Ashraful_Islam,你的天才 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多