我编写了这两行代码来使用XYDataset
创建图表:
final XYDataset dataset = new TimeSeriesCollection(myInfo.getSeries());
JFreeChart timechart = ChartFactory.createTimeSeriesChart(myInfo.getName()
+ " CPU (last 72h)", "", "CPU %", dataset, false, false, false);
这些线创造了这个美好的"持续72小时"图表:
这是我添加信息以构建此图表的方式(这段代码可以多次运行):
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小时内):
我查看了API并找不到合适的答案,因为我认为这应该有一些聪明但简单的解决方案。
答案 0 :(得分:2)
而不是按照建议的here 丢弃旧数据,它看起来像是要显示数据的连续子集,就像通过窗口查看一样。虽然SlidingCategoryDataset
为CategoryDataset
提供了此功能,但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;
另外,请注意,自提交补丁以来,某些类已经移动了:
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
更新索引。