Проблема форматирования оси даты JFreeChart

У меня есть график временных рядов. У меня есть ось x как дата, а ось Y - это просто числа. Я пытаюсь отформатировать дату по оси X, однако я продолжаю получать исключения. Мой код ниже:

        TimeSeries trueSeries = new TimeSeries("True Data");
        TimeSeries regressionSeries = new TimeSeries("Regression Line");
        TimeSeries averageSeries = new TimeSeries("Moving Average");

        for (Date date : regression.keySet()) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            int month = cal.get(Calendar.MONTH) + 1;
            int day = cal.get(Calendar.DAY_OF_MONTH);
            int year = cal.get(Calendar.YEAR);
            regressionSeries.add(new Day(day, month, year),
                    regression.get(date));
            averageSeries.add(new Day(day, month, year),
                    movingAverage.get(date));
            trueSeries.add(new Day(day, month, year), trueData.get(date));
        }
        TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(trueSeries);
        dataset.addSeries(regressionSeries);
        dataset.addSeries(averageSeries);
        JFreeChart chart = ChartFactory.createXYLineChart(
                stock.getCompanyName() + " (" + stock.getTicker() + ")",
                "Date", // x-axis Label
                "Close Price", // y-axis Label
                dataset, // Dataset
                PlotOrientation.VERTICAL, // Plot Orientation
                true, // Show Legend
                true, // Use tooltips
                false // Configure chart to generate URLs?
                );

Затем я пытаюсь преобразовать ось X в простой формат даты следующим образом:

XYPlot plot = (XYPlot) chart.getPlot();
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("dd-MM-yyyy")); 

Когда я запускаю это, я получаю следующее исключение:

java.lang.ClassCastException: org.jfree.chart.axis.NumberAxis не может быть приведен к org.jfree.chart.axis.DateAxis

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?


person Suraj Kulkarni    schedule 01.02.2014    source источник
comment
Возможный дубликат добавление даты/времени в график JFreeChart   -  person trashgod    schedule 02.02.2014


Ответы (2)


Согласно Добавление даты/времени в график JFreeChart:

«… вы используете ChartFactory.createXYLineChart(), который создает NumberAxis для домена. Вместо этого используйте ChartFactory.createTimeSeriesChart(), который создает DateAxis для домена». — мусорный бог

person Paul Facklam    schedule 01.02.2014

Использовать

XYPlot plot = (XYPlot) chart.getPlot();
DateAxis dateAxis = new DateAxis();
dateAxis.setDateFormatOverride(new SimpleDateFormat("dd-MM-yyyy")); 
plot.setDomainAxis(dateAxis);

XYPlot.setDomainAxis принимает ValueAxis, который является родителем DateAxis. Таким образом, это позволит избежать ошибки.

person Chirag Agrawal    schedule 11.05.2016