2010-09-13 110 views
8

我遇到了JFreeChart覆蓋圖的問題。我使用JFreeChart 1.0.13。我想要做的事情似乎是在JFreeChart的早期版本中做起來更容易?JFreeChart覆蓋圖的幫助

該圖顯示了折線圖和條形圖。 Y軸的折線圖繪製的數據範圍在0-100範圍內,並且條形圖的軸位於0-5範圍內。

單獨地,當我佈置每個圖表並繪製它們時,它們看起來很棒。這裏有一個例子:

柱狀圖alt text 線圖alt text

但是,當我覆蓋他們,條形圖被縮小到看起來非常沒用......大概是因爲兩個數據集的規模是如此不同。

實施例: alt text

我真正想要的是分裂系列數據的兩個數據集,並且顯示0-100範圍爲左側Y軸的線圖和具有條形圖顯示完整大小,如下面我的第一個示例所示,但在圖的右側Y軸側顯示刻度0-5。

要創建圖形,我使用的是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 2010-09-14 01:08:12

+1

感謝您的正確方向。添加: final ValueAxis yAxis = new NumberAxis(「溫度百分比時間」); \t \t plot.setRangeAxis(1,yAxis); plot.mapDatasetToRangeAxis(0,1); MapDataSetToRange是關鍵... – Griff 2010-09-14 14:12:49