如何仅显示 "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()
更新索引。
我写了这两行代码来使用 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()
更新索引。