首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制时间(毫秒)- JFreeChart (步骤图)

绘制时间(毫秒)- JFreeChart (步骤图)
EN

Stack Overflow用户
提问于 2012-06-13 23:36:12
回答 2查看 1.8K关注 0票数 0

我正在尝试绘制一个具有以下属性的步进图:x轴:时间(ms)实际数据包含了一个双精度值y轴:另一个值存储为整数。

我按如下方式填充数据集:

代码语言:javascript
复制
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;
}

我创建绘图的部分如下:

代码语言:javascript
复制
        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轴的ms格式的时间戳吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-14 00:37:55

看起来x轴的格式是日期,解决这个问题的一种方法是提供一个NumberFormatOverride

在创建chart后添加以下代码:

代码语言:javascript
复制
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);

然后你应该得到这个图表:

票数 2
EN

Stack Overflow用户

发布于 2012-08-07 23:51:11

仅供参考,每当迭代映射而不是迭代keySet()然后获取每个键的值时,请使用entrySet()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11018446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档