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小时”图表:
这就是我添加信息以构建此图表的方式(这段代码可以多次运行):
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,找不到合适的答案,因为我认为这应该有一些聪明而简单的解决方案.
解决方法:
如建议的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);
顺便说一句,请注意,自提交补丁以来,有些类已经移动:
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