JFreeChart Комбинированный график XY с временными рядами - PullRequest
5 голосов
/ 25 января 2012

Я хочу разместить две диаграммы временных рядов, разделяющие одну и ту же ось временной области друг над другом, с несколькими наборами данных.

chart1 = ChartFactory.createTimeSeriesChart("", "", "", tsc1, true, true, false);
subplot1 = chartCOT.getXYPlot();
...
chart2 = ChartFactory.createTimeSeriesChart("", "", "", tsc2, true, true, false);
subplot2 = chartCOT.getXYPlot();
...

где tsc1 и tsc2 - наборы данных TimeSeriesCollection, содержащие несколько TimeSeries, которые имеют одинаковый диапазон дат около 5 лет.

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

Как только я объединю два графика с помощью конструкции:

CombinedDomainXYPlot plot = new CombinedDomainXYPlot();
plot.setGap(10.0);
plot.add(subplot1, 2);
plot.add(subplot2, 1);
chart[ch] = new JFreeChart("label", null, plot, true);

диаграммы отображаются друг над другом, по желанию, но ось времени больше не отображает календарные даты, но такие значения, как 0, 250'000'000'000, 500'000'000'000 и т. Д., Какими они были представляя миллисекунды. Кроме того, временной диапазон увеличивается до левой стороны примерно на 30 лет, а данные графика (начиная с 2006 года) начинаются с крайней правой стороны и, соответственно, очень сильно сжимаются.

Как сохранить правильное представление оси домена (календарные даты между 2006 и 2012 гг.)?

1 Ответ

7 голосов
/ 29 января 2012

Я наконец-то нашел решение этой проблемы самостоятельно:

Когда я инициализирую CombinedDomainXYPlot, он выделяет numberAxis по умолчанию и не использует ось, уже определенную в подзаговорах.

Поэтому мне пришлось сказать plot, что ось домена - это временной ряд:

ValueAxis domainAxis = new DateAxis("");
plot.setDomainAxis(domainAxis);
...