Помощь с наложением JFreeChart

У меня проблема с наложенным графиком JFreeChart. Я использую JFreeChart 1.0.13. Кажется, что то, что я пытаюсь сделать, было проще сделать в более ранних версиях JFreeChart?

На графике показаны линейная диаграмма и гистограмма. Диапазон данных, отображаемый линейной диаграммой для оси Y, находится в диапазоне от 0 до 100, а ось для гистограммы находится в диапазоне от 0 до 5.

По отдельности, когда я выкладываю каждую диаграмму и раскрашиваю ее, они выглядят великолепно. Вот пример:

Гистограмма alt textЛинейная диаграмма  alt text

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

Пример: alt text

Что я действительно хочу, так это разделить данные серии для двух наборов данных и отобразить диапазон от 0 до 100 для линейной диаграммы на левой оси Y, а также чтобы гистограмма отображалась в полном размере, как в моем первом примере ниже, но шкала от 0 до 5 отображается справа от оси Y графика.

Чтобы создать график, я сначала создаю гистограмму с помощью XYSeriesCollection, добавляю данные и создаю график ...

XYSeriesCollection histogramDataset= new XYSeriesCollection();
XYSeries xy= new XYSeries("Temp");
xy.add(100,0.0);
xy.add(101,0.3769791404875597);
histogramDataset.addSeries(xy);
...
final NumberAxis xAxis = new NumberAxis("Temperature C");
xAxis.setAutoRangeIncludesZero(false);
final ValueAxis yAxis = new NumberAxis("Percent Time above Temperature");
final XYItemRenderer renderer = new XYBarRenderer();

final XYPlot plot = new XYPlot((XYDataset) histogramDataset, xAxis, yAxis, renderer);

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

final XYSeries xy = new XYSeries("First");
final XYDataset xySeriesData = new XYSeriesCollection();
final XYItemRenderer xyLineRenderer = new XYLineAndShapeRenderer();
xyLineRenderer.setSeriesShape(0, new Line2D.Double(0.0, 0.0, 0.0, 0.0));
xyLineRenderer.setSeriesStroke(0, new BasicStroke(4.5f));
xy.add(100,100.0);
xy.add(101,100.0);
xyseriesData.add(xy);
plot.setDataset(1, xySeriesData);
plot.setRenderer(1, xyLineRenderer);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

Я подозреваю, что каким-то образом каждый график должен быть отдельным графиком и объединен вместе. Кто-нибудь может помочь? Я собираюсь сделать что-то вроде этого: alt text

За исключением того, что я не хочу, чтобы гистограмма была фоновым изображением. Ось X должна быть такой же, а ось Y должна находиться с правой стороны с надлежащим масштабом, позволяющим отображать график в полном размере.

Любые / все ответы приветствуются ...


person Griff    schedule 13.09.2010    source источник


Ответы (1)


Я вижу, вы добавляете второй набор данных и средство визуализации к своему графику, но вы заставляете их использовать одну и ту же ось диапазона. Вместо этого дайте графику новый NumberAxis для диапазона второй набор данных.

Кстати, не упускайте из виду пример, связанный с осью, в Демонстрация JFreeChart, и не стоит недооценивать ценность Руководство разработчика JFreeChart.

person trashgod    schedule 14.09.2010
comment
Не связан с jfree.org/jfreechart; просто довольный клиент, а иногда и участник. - person trashgod; 14.09.2010
comment
Спасибо за толчок в правильном направлении. Добавление: final ValueAxis yAxis = new NumberAxis (Процент времени при температуре); plot.setRangeAxis (1, yAxis); plot.mapDatasetToRangeAxis (0, 1); MapDataSetToRange был ключевым ... - person Griff; 14.09.2010