如何仅显示"过去24小时"来自"过去72小时" JFreeChart TimeSeries

时间:2017-09-08 17:08:35

标签: java time-series jfreechart simpledateformat timeserieschart

我编写了这两行代码来使用XYDataset创建图表:

final XYDataset dataset = new TimeSeriesCollection(myInfo.getSeries());
JFreeChart timechart = ChartFactory.createTimeSeriesChart(myInfo.getName()
    + " CPU (last 72h)", "", "CPU %", dataset, false, false, false);

这些线创造了这个美好的"持续72小时"图表:

last 72hrs chart

这是我添加信息以构建此图表的方式(这段代码可以多次运行):

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd H:mm:ss");
Date date = simpleDateFormat.parse(dateAsStringToParse);
Second second = new Second(date);
myInfo.getSeries().addOrUpdate(second, maxValue); // maxValue is an Integer

我想(看似)简单的改动 - " cut"这只到过去的24小时。我的意思是只看到最近的"最近"在图中24小时,就像这样(图中是我使用相同技术制作的不同图表,但信息仅存在于过去24小时内):

last 24hrs chart

我查看了API并找不到合适的答案,因为我认为这应该有一些聪明但简单的解决方案。

1 个答案:

答案 0 :(得分:2)

而不是按照建议的here 丢弃旧数据,它看起来像是要显示数据的连续子集,就像通过窗口查看一样。虽然SlidingCategoryDatasetCategoryDataset提供了此功能,但XYDataset没有内置解决方案。 SlidingXYDataset SliderDemo2,可能是另一种选择。在下面说明的static final int COUNT = 3 * 24 * 60; public static final int WINDOW = 24 * 60; public static final int FIRST = 2 * 24 * 60; … this.slider.setValue(FIRST); 的变体中,我已经将一天的数据添加到一个系列中,并且有一天的时间窗口。我保留了滑块以便于查看之前的值。

import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

here

另外,请注意,自提交补丁以来,某些类已经移动了:

setMaximumItemAge()
  

只能使用addOrUpdate()

不孤立; removeAgedItems(false),在通知听众之前调用Second

  

我正在使用Second

例如,setMaximumItemAge(3 * 24 * 60 * 60)数据的三天会暗示firstItemIndex

  

我可能无法使用滑动窗口,因为我将图表另存为JPEG格式。

您可以将所需的SlidingXYDataset作为参数传递给setFirstItemIndex()构造函数;如果需要,您可以稍后通过customer1,1 customer2,2 customer3,3 customer4,4 customer5,5 更新索引。