如何仅显示 "last 72 hours" JFreeChart TimeSeries 中的 "last 24 hours"

How to display only "last 24 hours" from a "last 72 hours" JFreeChart TimeSeries

我写了这两行代码来使用 XYDataset:

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

这些线条创建了这个漂亮的 "last 72h" 图表:

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

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 小时。我的意思是只看到图表中最多的"recent" 24小时,就像这样(图中是我使用相同技术制作的不同图表,但信息仅存在于最后24小时):

我浏览了API但找不到合适的答案,因为我相信这应该有一些聪明但简单的解决方案。

而不是丢弃 旧数据,如建议here, it looks like you want to display a contiguous subset of the data, as if looking through a window. While SlidingCategoryDataset provides this feature for a CategoryDataset, there is no built-in solution for an XYDataset. SlidingXYDataset, seen here,也许是替代方案。在下面所示的 SliderDemo2 的变体中,我将三天的数据添加到具有一天 window 的单个系列中。我保留了滑块以便于查看之前的值。

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;

Can't I just use setMaximumItemAge()?

不是孤立的; addOrUpdate()等人,在通知听众之前调用 removeAgedItems(false)

I am using Second.

三天的 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() 更新索引。