2010-09-13 5 views
8

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

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

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

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

Любого/все ответы оценены ...

ответ

6

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

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

+0

Не является аффилированным лицом http://www.jfree.org/jfreechart/; просто довольный клиент и когда-то участник. – trashgod

+1

Спасибо за толкание в правильном направлении. Добавление: final ValueAxis yAxis = new NumberAxis («Процентное время при температуре»); \t \t plot.setRangeAxis (1, yAxis); plot.mapDatasetToRangeAxis (0, 1); MapDataSetToRange был ключевым ... – Griff