绘图时间(以毫秒为单位) - JFreeChart(步骤图表)

时间:2012-06-13 15:36:12

标签: jfreechart

我正在尝试使用以下属性绘制步骤图: x轴:时间(ms)[实际数据包含此值为双精度值] 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轴上以毫秒为单位显示时间的图,但是这个值被转换为一些奇怪的时间。这是情节看起来enter image description here

的方式

有人可以帮我回复x轴的ms格式的时间戳吗?

2 个答案:

答案 0 :(得分:2)

看起来x轴正在格式化为日期,一种解决方法是提供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);

你知道然后得到这张图表:

Chart

答案 1 :(得分:1)

仅供参考,每当您遍历Map而不是遍历keySet()然后获取每个键的值时,请使用 entrySet()