Получение нескольких наборов данных из JFreeChart

#java #jfreechart

#java #jfreechart

Вопрос:

Я использую JFreeChart, чтобы иметь 2 набора данных на одном графике. Я пытаюсь сравнить, насколько похожи точки на графике, и поэтому мне нужен доступ к 2 наборам данных, которые я поместил в диаграмму ранее, но по какой-то причине я не могу извлечь эту информацию.

Вот как вводятся данные:

  private static IntervalXYDataset createDataset()
 {
     DefaultXYDataset completeDataset = new DefaultXYDataset();

     //populate with simulated data
     double[][] sim = new double[2][simData.size()];
     for(int i = 0; i < simData.size(); i  ){
         sim[0][i] = simData.get(i).getOne();
         sim[1][i] = simData.get(i).getTwo();
     }

     //populated with known experimental data         
     double[][] exp = new double[2][expData.size()];
     for(int i = 0; i < expData.size(); i  ){
         exp[0][i] = expData.get(i).getOne();
         exp[1][i] = expData.get(i).getTwo();
     }

     completeDataset.addSeries("Simulated", sim);
     completeDataset.addSeries("Experimental", exp);

     XYBarDataset dataset = new XYBarDataset(completeDataset, .1);

     return dataset; 
 }
  

Изначально данные хранятся как пара, но я знаю, что данные вводятся, поскольку график показывает это правильно. Как я могу вернуть две серии в этом наборе данных?

Ответ №1:

Если я правильно понимаю, вы хотите получить свои 2 набора данных из completeDataset?

Поскольку DefaultXYDataset имеет некоторые ограничения, вы можете попробовать что-то подобное в качестве обходного пути. Я не тестировал его, поэтому может потребоваться некоторая настройка 🙂

     completeDataset .addSeries("Simulated", sim); //"Simulated" will be at position 0
    completeDataset .addSeries("Experimental", exp); //"Experimental" will be at position 1

    //get series length
    int countSeries1 = completeDataset.getItemCount(0); //number of items in Simulated
    int countSeries2 = completeDataset.getItemCount(1); //number of items in Experimental

    double[][] series1 = new double[2][countSeries1];
    double[][] series2 = new double[2][countSeries2];

    //recreate Simulated series
    for(int i = 0; i < countSeries1; i  ){

        series1[0][i] = completeDataset.getXValue(0, i);
        series1[1][i] = completeDataset.getYValue(0, i);

    }
    //recreate Experimental series
    for(int i = 0; i < countSeries2; i  ){

        series2[0][i] = completeDataset.getXValue(1, i);
        series2[1][i] = completeDataset.getYValue(1, i);

    }
  

Комментарии:

1. Это ответило на ваш вопрос?

2. похоже, что в completeDataset по какой-то причине нет функции getSeries() .

3. Я отредактировал свой ответ. Надеюсь, это поможет получить ваши наборы данных. Если это не так, то стоит взглянуть на XYSeriesCollection для хранения и извлечения вашей серии.

4. Я бы поддержал последний комментарий Фрэнка Ди … использование XYSeries / XYSeriesCollection сделает код намного более простым.