2016-08-29 4 views
1

Это мой код на данный момент (обновлено):Карта динамического набора данных к другой оси в JFreeChart

public DynamicTimeSeriesCollection dataset; 
private static final String TITLE = "Stripchart"; 
private static final int COUNT = 3 * 60; 
private static final int TEMP_MIN = -10; 
private static final int TEMP_MAX = 50; 
private static final int AIR_MIN = 0; 
private static final int AIR_MAX = 20; 
private static final int INSO_MIN = 0; 
private static final int INSO_MAX = 1; 
public void draw(Data data) { 
    float[] newData = new float[3]; 
    newData[0] = (float) data.getTemp(); 
    newData[1] = (float) data.getAir(); 
    newData[2] = (float) data.getInso(); 
    dataset.advanceTime(); 
    dataset.appendData(newData); 
} 

private ChartPanel createChart() { 
    dataset = new DynamicTimeSeriesCollection(3, COUNT, new Second()); 
    dataset.setTimeBase(new Second(0, 0, 0, 1, 1, 2016)); 
    dataset.addSeries(new float[1], 0, "Temperature"); 
    dataset.addSeries(new float[1], 1, "Air"); 
    dataset.addSeries(new float[1], 2, "Insolation"); 
    final JFreeChart result = ChartFactory.createTimeSeriesChart(
      TITLE, "hh:mm:ss", " ", dataset, true, true, false); 
    final XYPlot plot = result.getXYPlot(); 
    ValueAxis domain = plot.getDomainAxis(); 
    domain.setAutoRange(true); 
    NumberAxis temp = new NumberAxis("Temperature"); 
    NumberAxis air = new NumberAxis("Air"); 
    NumberAxis inso = new NumberAxis("Insolation"); 

    plot.setRangeAxis(0, temp); 
    plot.setRangeAxisLocation(0, AxisLocation.BOTTOM_OR_LEFT); 
    plot.setRangeAxis(1, air); 
    plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_LEFT); 
    plot.setRangeAxis(2, inso); 
    plot.setRangeAxisLocation(2, AxisLocation.BOTTOM_OR_LEFT); 
    List<Integer> axes = Arrays.asList(0, 1, 2); 
    plot.mapDatasetToRangeAxes(0, axes); 
    temp.setRange(TEMP_MIN, TEMP_MAX); 
    air.setRange(AIR_MIN, AIR_MAX); 
    inso.setRange(INSO_MIN, INSO_MAX); 

    ChartPanel chartPanel = new ChartPanel(result); 

    return chartPanel; 
} 

Блоки ° С, м/с и лк соответственно.

Все работает нормально, но оно не отображает серию точно так, как я хочу.

enter image description here

Как вы можете видеть, синяя линия и зеленая линия не отображается со второй и третьей оси.

Любые идеи, чтобы заставить его работать?

Ваша помощь будет оценена по достоинству.

// Обновлено:

Я попытался использовать это, но результат тот же:

List<Integer> axes = Arrays.asList(0, 1, 2); 
plot.mapDatasetToRangeAxes(0, axes); 

ответ

3

В вашем фрагменте, я вижу три оси и один набор данных с тремя сериями. Ваши звонки в mapDatasetToRangeAxis(), по-видимому, предполагают три разных набора данных. Как было предложено в этом связанной example, вы можете что-то вроде этого:

List<Integer> axes = Arrays.asList(0, 1, 2); 
plot.mapDatasetToRangeAxes(0, axes); 

подход предполагает, что три серии имеют линейно зависимые весы, и вам придется масштабировать отдельные оси соответственно, как показано here. Вы можете попробовать отдельные наборы данных, но я не пробовал.

Приложение: На основании вашего обновления выяснилось, что три набора данных не являются соразмерными. Вместо этого создайте три отдельных набора данных. Используйте первый в вашей диаграмме заводе, использовать setDataset() установить другие два и сопоставить их соответственно:

final JFreeChart result = ChartFactory.createTimeSeriesChart(
    TITLE, "hh:mm:ss", " ", createDatasetTemp(), true, true, false); 
… 
plot.setDataset(1, createDatasetAir()); 
plot.setDataset(2, createDatasetInso()); 
plot.setRangeAxis(0, temp); 
plot.setRangeAxisLocation(0, AxisLocation.BOTTOM_OR_LEFT); 
plot.setRangeAxis(1, air); 
plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_LEFT); 
plot.setRangeAxis(2, inso); 
plot.setRangeAxisLocation(2, AxisLocation.BOTTOM_OR_LEFT); 
plot.mapDatasetToRangeAxis(0, 0); 
plot.mapDatasetToRangeAxis(1, 1); 
plot.mapDatasetToRangeAxis(2, 2); 
+0

'Список оси = Arrays.asList (0, 1, 2),' ' plot.mapDatasetToRangeAxes (0 , оси); ' Он не работает так, как я хочу. Что делать, если у трех серий есть независимые весы? – Forrest

+0

Я вижу ° C и w/m^2. Каковы единицы «Воздуха»? Для получения более конкретных рекомендаций, пожалуйста, отредактируйте свой вопрос, включив в него [mcve], который показывает ваш пересмотренный подход. – trashgod

+0

Отредактировано. Btw, есть ли способ сбросить все серии в наборе данных? – Forrest