JFreeChart TimeSeries Axis в невоенное время

Я пытаюсь построить график TimeSeries данные в Java с помощью JFreeChart Однако данные состоят из двойников, которые являются выходными Renjin, Код для добавления данных в TimeSeries как следует:

for (int i=0; i<series2Values.length; i++) {
    if (!Double.isNaN(series2Values[i])) {
        series2.add(new Hour((int)times[i], new Day()), series2Values[i]);
    } else {
        series2.add(new Hour((int)times[i], new Day()), null);
    }
}

final TimeSeriesCollection dataset2 = new TimeSeriesCollection();
dataset2.addSeries(series2);

JFreeChart chart2 = ChartFactory.createTimeSeriesChart(title, "Time (Hour)", "Vehicles Parked", dataset2, true, true, false);
ChartFrame frame2 = new ChartFrame(title, chart2, false);
frame2.pack();
frame2.setIconImage(img.getImage());
frame2.setVisible(true);

Проблема заключается в том, что всякий раз, когда данные собираются, время по оси X отображается в 24-часовом военном времени, и если time[] массив содержит любые повторяющиеся значения следующие SeriesException брошен:

Exception in thread "AWT-EventQueue-0" org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period [6,12/7/2016] but the series already contains an observation for that time period. Duplicates are not permitted.  Try using the addOrUpdate() method.

addOrUpdate() Метод, рекомендованный Исключением, просто перезапишет первую точку данных за это время на 12 часов раньше, а не создаст новую. Вместо этого я хотел бы отобразить данные в 12-часовом формате с указанием AM и PM.

Есть ли удобный способ сделать это с JFreeChart или было бы удобнее изменить код, чтобы мои звонки Renjin вернуть что-то отформатированное, а не просто целые числа от 1 до 24? (например, уже отформатированные строки времени)?

Кросс-пост здесь.

1 ответ

Решение

Я не знаком с Renjin, но при условии Date значение, представляющее миллисекунды с начала эпохи,

  1. использование setDateFormatOverride() на оси с подходящим SimpleDateFormat например,

    axis.setDateFormatOverride(new SimpleDateFormat("hh:mm"));
    
  2. TimeSeries "гарантирует… что каждый период появляется не более одного раза в серии". Это должно стать спорным, если входящее значение преобразуется правильно.

Другие вопросы по тегам