如何仅显示“过去72小时”JFreeChart TimeSeries中的“过去24小时”
我写了这两行代码来使用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
我想要一个(看似简单的)简单的改动 – 仅在过去24小时内“切断”这个。 我的意思是在图中只看到最近的24小时,就像这样(图中是我使用相同技术制作的不同图表,但信息仅存在于过去24小时):
我查看了API并找不到合适的答案,因为我认为这应该有一些聪明但简单的解决方案。
这里建议的不是丢弃旧数据,而是希望显示数据的连续子集,就像在窗口中查看一样。 虽然SlidingCategoryDataset
为CategoryDataset
提供了此function,但是没有针对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()
, et al。 ,在通知侦听器之前调用removeAgedItems(false)
。
我正在使用
Second
。
例如,第二天数据的三天将意味着setMaximumItemAge(3 * 24 * 60 * 60)
。
我可能无法使用滑动窗口,因为我将图表另存为JPEG。
您可以将所需的firstItemIndex
作为参数传递给SlidingXYDataset
构造函数; 如果需要,可以稍后通过setFirstItemIndex()
更新索引。