問題描述
我編寫了這兩行代碼來使用 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");日期日期 = simpleDateFormat.parse(dateAsStringToParse);秒秒 = 新秒(日期);myInfo.getSeries().addOrUpdate(second, maxValue);//maxValue 是一個整數
我想要一個(看似)簡單的更改——將其刪減"到最后 24 小時.我的意思是在圖表中只看到最近的 24 小時,就像這樣(圖中是我使用相同技術制作的不同圖表,但信息僅存在于最近 24 小時):
我查看了 API 并找不到合適的答案,因為我相信這應該有一些聰明而簡單的解決方案.
而不是丟棄舊數據,建議
順便說一句,請注意,自從提交補丁后,一些類已經移動:
import org.jfree.ui.ApplicationFrame;導入 org.jfree.ui.RefineryUtilities;
<塊引用>
我不能只使用 setMaximumItemAge()
嗎?
不是孤立的;addOrUpdate()
,et al.,在通知偵聽器之前調用 removeAgedItems(false)
.
我正在使用 Second
.
Second
數據的三天,例如,將暗示 setMaximumItemAge(3 * 24 * 60 * 60)
.
我可能無法使用滑動窗口,因為我將圖表保存為 JPEG.
您可以將所需的 firstItemIndex
作為參數傳遞給 SlidingXYDataset
構造函數;如果需要,您可以稍后通過 setFirstItemIndex()
更新索引.
I wrote these 2 lines of code to create a chart using an XYDataset
:
final XYDataset dataset = new TimeSeriesCollection(myInfo.getSeries());
JFreeChart timechart = ChartFactory.createTimeSeriesChart(myInfo.getName()
+ " CPU (last 72h)", "", "CPU %", dataset, false, false, false);
These lines created this nice "last 72h" chart:
This is how I added the information to build this chart (this piece of code can run multiple times):
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
I want a (seemingly) simple alteration—to "cut" this only to the last 24 hours. I mean to see only the most "recent" 24 hours in the graph, like so (in the picture is a different chart I made using the same technique, but the information exists only for the last 24hrs):
I have looked through the API and could not find an appropriate answer, as I believe this should have some clever but simple solution.
Instead of discarding old data, as suggested 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, maybe an alternative. In the variation of SliderDemo2
illustrated below, I've added three days of data to a single series with a one day window. I've retained the slider for easy review of earlier values.
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);
As an aside, note that some classes have moved since the patch was submitted:
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
Can't I just use
setMaximumItemAge()
?
Not in isolation; addOrUpdate()
, et al., calls removeAgedItems(false)
before notifying listeners.
I am using
Second
.
Threes days of Second
data, e.g., would imply setMaximumItemAge(3 * 24 * 60 * 60)
.
A sliding window might not be available to me since I am saving the chart as a JPEG.
You can pass the desired firstItemIndex
as a parameter to the SlidingXYDataset
constructor; you can update the index later via setFirstItemIndex()
if needed.
這篇關于如何僅顯示“過去 24 小時"?從“過去 72 小時"開始JFreeChart 時間序列的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!