【问题标题】:Plotting data over time with JFreeChart使用 JFreeChart 随时间绘制数据
【发布时间】:2013-08-15 20:14:14
【问题描述】:

我正在创建一个图表,以显示一段时间内模拟运行的数据。我遇到的问题是我似乎无法使用 TimeSeriesCollection,因为它使用从 1970 年 1 月 1 日开始的日期对象。我们需要的日期格式是从模拟开始时间向上计数的格式。

例如,如果发生事件导致计数在模拟的 60 分钟标记处增加,则图表上的时间戳将显示为 01:00:00(一小时零分钟零秒)。如果事件发生在第 28 小时 19 分 12 秒,沿 X 轴的时间戳需要读取 29:19:12。

我绘制的数据只是随时间变化的整数。

谁能给我一个快速而肮脏的纲要我如何做到这一点?

编辑:我应该声明我不需要使用 TimeSeriesCollection。我可以使用 JFreeChart 库中的任何和所有实用程序。

【问题讨论】:

    标签: java jfreechart


    【解决方案1】:

    RelativeDateFormat 类正是为此目的而设计的。您的数据不需要更改(它是正确的),只需要调整演示文稿。因此,创建一个 RelativeDateFormat 实例,将模拟的开始时间传递给它,并将其用作轴的日期格式化程序。它将显示相对于开始时间的时间。

    【讨论】:

    • +1 我之前忽略了这一点,我可以看到更改格式而不是数据模型的吸引力。 @Nedlinin:你可以在轴上使用setDateFormatOverride()
    【解决方案2】:

    here 所示,“工厂方法ChartFactory.createTimeSeriesChart() 将接受任何XYDataset,其中域表示来自Java epoch 的毫秒数。” example cited 扩展 AbstractXYDataset();您可以从 getX() 的实现中返回时间戳,从 getY() 中返回整数。

    【讨论】:

      【解决方案3】:

      我不知道 TimeSeriesCollection 和 JFreeChart 的详细信息,但是您可以通过存储模拟开始的时间(也相对于 1970 年 1 月 1 日)来解决您的问题:

      long startTime = new Date().getTime();
      

      然后您可以从 TimeSeriesCollection 中的时间中减去 startTime 值,以获得您的 X 轴值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 2019-03-13
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多