Я пытаюсь отобразить данные на XYBarChart с помощью JFreechart. На диаграмме должны отображаться моменты времени вместе с количеством. Таким образом, если пользователь выбирает 25 января и 25 марта в качестве диапазона, диаграмма должна отображать данные между этими датами через определенные интервалы:
если пользователь выбирает ЧАС, я создаю коллекцию за каждый час с 25 января по 10 марта вместе с соответствующим счетчиком. Естественно, это довольно большая коллекция. Если пользователь выбирает МЕСЯЦ, то он должен видеть 3 месяца (и только 3 записи в коллекции). Если пользователь выберет ДЕНЬ, то он увидит только около 60 записей. Понимаете?
Когда я создаю диаграмму (используя приведенный ниже код для создания набора данных), она «интерполирует» значения. Если я выберу часы, он будет показывать данные по дням с большим количеством столбцов между днями (например, 24 маленьких столбика в течение дня). Если я выберу месяцы, у меня все равно будут дни на 2 месяца, но я получу один гигантский блок, охватывающий все дни месяца. Если я выберу ДЕНЬ, все будет хорошо.
Как я могу заставить jfreecharts перестать интерполировать значения и просто нарисовать диаграмму с сопоставлением 1: 1 с тем, какие данные я ей даю. Если я дам ему две записи на 2 месяца и дам ему RegularTimePeriod для Month.class, покажите только две полосы с двумя метками и двумя значениями. Если я дам ему 1000 часов в течение нескольких месяцев, то отображать каждый час с меткой и счетчиком и так далее ...
TimeSeries timeSeries = new TimeSeries(title, "Blah", "blah", clazz);
// clazz is one of Day.class, Month.class, Hour.class
for (final ReportRecord reportRecord : records) {
int count = reportRecord.getCount();
Date start = reportRecord.getDateRange().getStart();
RegularTimePeriod period = null;
switch (type) {
case DAY: period = new Day(start); break;
case MONTH: period = new Month(start); break;
case HOUR: period = new Hour(start); break;
}
timeSeries.add(new TimeSeriesDataItem(period, count));
}
return new TimeSeriesCollection(timeSeries);
Спасибо, Джош