2011-08-04 156 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轴范围。希望这可以帮助。