Помогите с оверлеем JFreeChart - PullRequest
       37

Помогите с оверлеем JFreeChart

8 голосов
/ 13 сентября 2010

У меня проблема с наложенным графиком 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 должна быть с правой стороны с правильным масштабом, который позволяет отображать график в полном размере.

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

1 Ответ

6 голосов
/ 14 сентября 2010

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

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

...