9

JFreeChartJava アプリでローソク足チャートを作成するために使用しています。ただし、私のチャートは次のようになります。

キャプチャー 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)または「軸範囲…強制的にゼロを含める」ようにしてください。

補遺:

NumberAxisオブジェクトをChartPanelオブジェクトまたはオブジェクトにリンクする方法がまだわかりませんJFreeChart

ここorg.jfree.chart.demoとの例を調べてみてください。これがterraincognitaの場合は、 JFreeChart開発者ガイド†</sup>をお勧めします。

†</sup>免責事項:ObjectRefineryLimitedとは提携していません。満足している顧客であり、貢献者はごくわずかです。

于 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 に答える