Преобразование серии JFreeChart TimeSeries с данными дня в данные недели или месяца?

Я понимаю, что это может быть глупый вопрос, и я знаю, что это можно сделать, определив, на какой неделе или в месяц находится каждая точка данных, и т. Д., Но я ищу способ избежать кодирования. Если это было сделано в библиотеке (предположительно, все gotchas получили), я бы предпочел использовать это.

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

Большое спасибо за любые советы, которые вы можете предложить.

Ничто не говорит, что вы должны использовать TimeSeries или RegularTimePeriod . Заводской метод ChartFactory.createTimeSeriesChart() примет любой XYDataset в котором домен представляет миллисекунды из эпохи Java. Пример ниже расширяет AbstractXYDataset чтобы синтезировать серию дней. Ваша реализация должна будет нормализовать даты Excel, которые используют другую эпоху .

Приложение: POI Apache включает в себя статические методы DateUtil.getJavaDate() для выполнения преобразования. Результирующие времена могут использоваться непосредственно в выбранном вами наборе данных. Полный пример можно найти здесь .

образ

 import java.awt.Dimension; import java.text.DateFormat; import java.util.Date; import javax.swing.JFrame; import org.jfree.chart.*; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.data.xy.AbstractXYDataset; import org.jfree.data.xy.XYDataset; /** @see https://stackoverflow.com/a/12481509/230513 */ public class AbstractXYTest { private static XYDataset createDataset() { return new AbstractXYDataset() { private static final int N = 16; private final long t = new Date().getTime(); @Override public int getSeriesCount() { return 1; } @Override public Comparable getSeriesKey(int series) { return "Data"; } @Override public int getItemCount(int series) { return N; } @Override public Number getX(int series, int item) { return Double.valueOf(t + item * 1000 * 3600 * 24); } @Override public Number getY(int series, int item) { return Math.pow(item, 1.61); } }; } private static JFreeChart createChart(final XYDataset dataset) { JFreeChart chart = ChartFactory.createTimeSeriesChart( "Test", "Day", "Value", dataset, false, false, false); XYPlot plot = (XYPlot) chart.getPlot(); DateAxis domain = (DateAxis) plot.getDomainAxis(); domain.setDateFormatOverride(DateFormat.getDateInstance()); return chart; } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); XYDataset dataset = createDataset(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart) { @Override public Dimension getPreferredSize() { return new Dimension(800, 300); } }; f.add(chartPanel); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } } 
  • CombinedDomainXYPlot не перемасштабирует доменную ось
  • JFreeChart: X Axis содержит отметки времени
  • Добавить значения в указанную строку в DynamicTimeSeriesCollection
  • Линейная диаграмма JFreeChart с текстом в каждой точке
  • JFreechart Loop через сектора полярных диаграмм
  • Как установить разные цвета в столбцы в гистограмме в штабеле в iireport?
  • Jfreechart создает всплывающую подсказку в chartPanel
  • JFreeChart - проблема создания движущейся диаграммы
  • Изменение цвета ртути в термометре в JFreeChart
  • Как повернуть метки меток на домене числовой оси в JFreeChart?
  • Заполнить JFreechart TimeSeriesCollection из Mysql DB?
  • Давайте будем гением компьютера.