0

次のプロパティを使用してステップ チャートをプロットしようとしています: x 軸: 時間 (ミリ秒) [実際のデータにはこれが double 値として含まれています] y 軸: 整数として格納された別の値。

次のようにデータセットを埋めています。

private XYSeries populateStepChartDataSet(HashMap<Double, Integer> dataGrid){
    XYSeries xySeries = new XYSeries("Step Plot", true, true);

    if(dataGrid != null){
        for (Double timeStamp : dataGrid.keySet()) {
            xySeries.add(timeStamp, dataGrid.get(timeStamp));
        }
    }

    return xySeries;
}

そして、プロットを作成するセクションは次のとおりです。

        final XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(populateStepChartDataSet(dspDataGrid));

        final JFreeChart chart = ChartFactory.createXYStepChart(
            title,
            xAxisLabel, yAxisLabel,
            dataset,
            PlotOrientation.VERTICAL,
            true,   // legend
            true,   // tooltips
            false   // urls
        );

私が期待しているのは、プロットが x 軸にミリ秒で時間を表示することですが、この値は奇妙な時間に変換されています。プロットは次のようになりますここに画像の説明を入力

誰かが x 軸のミリ秒形式のタイムスタンプを取り戻すのを手伝ってくれませんか?

4

2 に答える 2

2

x軸が日付としてフォーマットされているようです。これに対処する1つの方法は、NumberFormatOverride

chart作成後に次のコードを追加します。

XYPlot plot = (XYPlot)chart.getPlot();
plot.setDomainAxis(0, new NumberAxis()); 
NumberAxis axis = (NumberAxis) plot.getDomainAxis();
axis.setNumberFormatOverride( new NumberFormat(){

    @Override
    public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {

    return new StringBuffer(String.format("%f", number));
    }

    @Override
    public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {
    return new StringBuffer(String.format("%9.0f", number));
    }

    @Override
    public Number parse(String source, ParsePosition parsePosition) {
    return null;
    }
    } );
    axis.setAutoRange(true);
    axis.setAutoRangeIncludesZero(false);

次に、このチャートを取得します。

チャート

于 2012-06-13T16:37:54.643 に答える
1

参考までに、keySet() を反復処理してから各キーの値を取得する代わりに、Map を反復処理するときは常にentrySet()を使用してください。

于 2012-08-07T15:51:11.183 に答える