9

我正在使用JFreeChart在我的 Java 应用程序中创建烛台图表。但是,我的图表最终看起来像这样:

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

我想让 Y 轴自动缩放,使图表看起来更像这样:

捕获2wl 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
...
4

2 回答 2

9

确保setAutoRangeIncludesZero(false)或“轴范围……被强制包含零”。

附录:

我仍然不知道如何将对象链接NumberAxisChartPanel对象或JFreeChart对象。

您可能想查看org.jfree.chart.demo此处的示例。如果这是terra incognita,我会推荐JFreeChart 开发人员指南†</sup>。

†</sup>免责声明:不隶属于 Object Refinery Limited;只是一个满意的客户和非常小的贡献者。

于 2011-08-04T17:33:51.387 回答
6

我是这样做的:

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

这似乎给了我一个很好的烛台图表,它很好地利用了 Y 轴范围。希望这可以帮助。

于 2011-09-14T05:16:54.660 回答