2011-08-04 150 views
5

我使用JFreeChart在我的Java應用程序中創建燭臺圖表。然而,我的圖表最終這樣看:JfreeChart中的自動縮放Y軸

capturebhx http://imageshack.us/photo/my-images/69/capturebhx.png/

我想有Y軸自動縮放,使得圖表看起來更像是這樣的:

capture2wl http://imageshack.us/photo/my-images/717/capture2wl.png/

我認爲org.jfree.chart.axis.NumberAxis.configure()會這樣做,但我不確定。我似乎無法找到將我的JFreeChart對象或ChartPanel對象與此NumberAxis對象綁定的方法。請幫助我,我迷路了,一直在尋找很長時間來嘗試將這些物體綁在一起。或者,如果你能找到另一種方式,那也會很棒!

一些代碼:

... 
private DefaultHighLowDataset dataset; 
private JFreeChart chart; 
private ChartPanel chart_panel; 

... 

// creates dataset, then chart from dataset, then chart_panel from chart 
dataset = new DefaultHighLowDataset("", date, high, low, open, close, volume); 
chart = ChartFactory.createCandlestickChart("Blank", "Time", "Price", dataset, false); 
chart_panel = new ChartPanel(chart); // what you see in the images 
... 
+1

某些代碼片段可以提供幫助。 –

回答

6

一定要setAutoRangeIncludesZero(false)或 「軸範圍...被強制包括零。」

附錄:

我仍然不知道如何將NumberAxis對象鏈接到ChartPanel對象或JFreeChart對象。

您可能想要查看org.jfree.chart.demohere中的示例。如果這是terra incognita,我會推薦The JFreeChart Developer Guide

聲明:與Object Refinery Limited無關;只是一個滿意的客戶和非常小的貢獻者。

+0

也可以這樣做,但我仍然不知道如何將NumberAxis對象鏈接到ChartPanel對象或JFreeChart對象。 – supercoder

+0

我已經詳細闡述過了。如果仍有問題,請發佈[sscce](http://sscce.org/)用於創建您的[image](http://imageshack.us/photo/my-images/69/capturebhx.png /)。 – trashgod

+0

我也有同樣的問題,但我使用Android的afreechart庫。而這段代碼對我不起作用。 – arjunkn

4

我做了這樣的:

 final JFreeChart chart = ChartFactory.createCandlestickChart(
      "Candlestick Demo", "Time", "Price", dataset, false); 

    double lowestLow = getLowestLow(dataset); 
    double highestHigh = getHighestHigh(dataset); 

    chart.getXYPlot().getRangeAxis().setRange(lowestLow*0.95, highestHigh*1.05); 

我使用這些功能

private double getLowestLow(DefaultHighLowDataset dataset){ 
    double lowest; 
    lowest = dataset.getLowValue(0,0); 
    for(int i=1;i<dataset.getItemCount(0);i++){ 
     if(dataset.getLowValue(0,i) < lowest){ 
      lowest = dataset.getLowValue(0,i); 
     } 
    } 

    return lowest; 
} 


private double getHighestHigh(DefaultHighLowDataset dataset){ 
    double highest; 
    highest = dataset.getHighValue(0,0); 
    for(int i=1;i<dataset.getItemCount(0);i++){ 
     if(dataset.getLowValue(0,i) > highest){ 
      highest = dataset.getHighValue(0,i); 
     } 
    } 

    return highest; 
} 

這似乎給了我一個非常漂亮的K線圖,使良好的計算最低低和最低高使用Y軸範圍。希望這可以幫助。