2010-09-13 16 views
8

Występuje problem z nałożonym wykresem JFreeChart. Używam JFreeChart 1.0.13. Co próbuję zrobić wydaje się, jak było łatwiej zrobić we wcześniejszych wersjach JFreeChart?Pomoc z nakładką JFreeChart

Wykres przedstawia wykres liniowy i wykres słupkowy. Zakres danych wykreślony przez wykres liniowy dla osi Y leży w przedziale 0-100, a oś wykresu słupkowego znajduje się w zakresie 0-5.

Indywidualnie, kiedy układam poszczególne wykresy i maluję je, wyglądają świetnie. Oto przykład:

Bar Wykres alt text Linia alt text

Ale kiedy je nakładać, wykres bar zostaje zmniejszony aby wyglądać niezwykle bezużyteczny ... przypuszczalnie dlatego, że waga tych dwóch zestawów danych są tak różne.

Przykład: alt text

Co ja naprawdę chcę to rozdzielić dane serii dla dwóch zestawów danych i wyświetlać zakres 0-100 dla wykresu liniowego na lewej osi Y dłoń i mieć wykres słupkowy wyświetlane w pełnym rozmiarze, jak w moim pierwszym przykładzie poniżej, ale mają skalę 0-5 wyświetlaną na prawej stronie osi Y wykresu.

Aby utworzyć wykres, ja najpierw tworząc wykres słupkowy przy użyciu XYSeriesCollection, dodanie danych i tworzenia fabuły ...

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); 

Potem utworzyć wykres liniowy w podobny sposób i dodać Druga seria do działki ...

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); 

Podejrzewam, że jakoś każdy wykres musi być jego własną fabryką i połączony ze sobą. Czy ktoś może pomóc? To, co zamierzam tutaj zrobić, to coś takiego: alt text

Z wyjątkiem tego, że nie chcę, aby wykres słupkowy był obrazem tła. Oś X powinna być taka sama, a oś Y powinna znajdować się po prawej stronie z odpowiednią skalą, która pozwala na pokazanie pełnego rozmiaru wykresu.

Wszelkie/wszystkie odpowiedzi są doceniane ...

Odpowiedz

6

Widzę, że dodanie drugiego zestawu danych i renderujący do swojej działki, ale jesteś zmuszając ich do korzystania z samą oś zasięgu. Zamiast tego podaj nowy wykres NumberAxis dla zakresu drugiego zestawu danych.

Odkładając na bok, nie należy przeoczyć przykładu dotyczącego osi w dokumencie JFreeChart Demo i nie należy lekceważyć wartości JFreeChart Developer Guide.

+0

Nie należy do http://www.jfree.org/jfreechart/; tylko zadowolony klient i czasami współpracownik. – trashgod

+1

Dzięki za pchnięcie we właściwym kierunku. Dodawanie: final ValueAxis yAxis = new NumberAxis ("Procent czasu w temperaturze"); \t \t plot.setRangeAxis (1, yAxis); plot.mapDatasetToRangeAxis (0, 1); MapDataSetToRange był kluczem ... – Griff