JfreeChart中的自动缩放Y轴

9

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

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
一些代码片段可能会有所帮助。 - Ido Weinstein
2个回答

9

这也可能行,但我仍然不知道如何将NumberAxis对象链接到ChartPanel对象或JFreeChart对象。 - supercoder
我已经详细说明了。如果您仍然有困难,请发布用于创建您的图像的sscce - trashgod
我也有同样的问题,但我正在使用Android的afreechart库。这段代码对我不起作用。 - arjunkn
@arjunkn:请点击“[ask]”提出新问题,并添加标签“[tag:android]”。 - trashgod
如果我使用ChartFactory创建了一个图表,如何获取NumberAxis实例?到目前为止,我一直在使用不安全的类型转换((NumberAxis)myChart.getXYPlot().getRangeAxis()).setAutoRangeIncludesZero(false),这是一种有点肮脏的hack。有什么建议吗? - Joerg
@Joerg:为自己构建轴,例如:(http://stackoverflow.com/a/38080778/230513)。 - trashgod

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轴范围。希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接