编程语言
首页 > 编程语言> > java-如何仅显示“过去72小时”中的“过去24小时”

java-如何仅显示“过去72小时”中的“过去24小时”

作者:互联网

我编写了以下两行代码以使用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

我想要一个(看似)简单的更改-仅将其“剪切”到最后24小时.我的意思是只在图表中看到最近的24小时,就像这样(图片中是我使用相同技术制作的另一张图表,但是信息仅在最近的24小时内存在):

last 24hrs chart

我已经浏览了API,找不到合适的答案,因为我认为这应该有一些聪明而简单的解决方案.

解决方法:

如建议的here那样,它不是要丢弃旧数据,而是要显示数据的连续子集,就像通过窗口查看一样.虽然SlidingCategoryDataset为CategoryDataset提供了此功能,但没有针对XYDataset的内置解决方案. SlidingXYDataset,见here,也许是另一种选择.在下面所示的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);

image

顺便说一句,请注意,自提交补丁以来,有些类已经移动:

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

Can’t I just use setMaximumItemAge()?

不孤立地addOrUpdate()等在通知侦听器之前调用removeAgedItems(false).

I am using Second.

例如,三秒之内的第二个数据将暗示setMaximumItemAge(3 * 24 * 60 * 60).

A sliding window might not be available to me since I am saving the chart as a JPEG.

您可以将所需的firstItemIndex作为参数传递给SlidingXYDataset构造函数;您可以稍后根据需要通过setFirstItemIndex()更新索引.

标签:java,jfreechart,time-series,simpledateformat,timeserieschart
来源: https://codeday.me/bug/20191011/1895424.html