通過JFreeChart插件只能生成普通效果的時序圖,利用工廠類ChartFactory的createTimeSeriesChart()方法獲得JFreeChart類的實例,在封裝用來繪製時序圖的數據時,只能利用XYDataset數據集,而不能利用CategoryDataset數據集。
時序圖與折線圖有些類似,不過時序圖提供了繪製移動平均線的功能,通過給定的數據集對象,可以自動計算任意時間段的移動平均值,移動平均值的計算方法請參見表14.8。
表14.8 移動平均值的計算方法
時 間 |
零 售 價 |
2天內的移動平均值 |
3天內的移動平均值 | ||
值 |
移動平均值的計算方法 |
值 |
移動平均值的 | ||
2008-8-6 |
4 |
無 |
也可視爲4 |
無 |
也可視爲4 |
2008-8-7 |
6 |
5 |
(4+6)/2 |
無 |
也可視爲5 |
2008-8-8 |
8 |
7 |
(6+8)/2 |
6 |
(4+6+8)/3 |
如果要繪製移動平均線,就要創建一個用來繪製移動平均線的數據集實例,MovingAverage類提供了多個重載的用來創建數據集對象的靜態方法,其一的定義如下:
public static TimeSeries createMovingAverage(TimeSeries source,
String name, int periodCount, int skip)
參數說明
ll source:移動平均線對應的繪圖數據集實例,移動平均線的繪製數據即根據該實例產生。
ll name:移動平均線圖例的名稱。
ll periodCount:移動平均值的計算週期。
ll skip:移動平均值的起始計算點。
然後通過TimeSeriesCollection類的addSeries()方法,將繪圖數據集和移動平均線數據集添加到TimeSeriesCollection類的實例中。
示例14-06 每日股票走勢時序圖分析
下面來看一個繪製時序圖的例子,該例繪製的時序圖效果如圖14.9所示。
圖14.9 每日股票走勢時序圖分析
代碼14-06 光盤位置:光盤/mingrisoft/sl/14/06
創建繪圖數據集實例,代碼如下:
TimeSeries timeSeries = new TimeSeries(chartTitle, xTitle, yTitle, Minute.class);
Iterator it = data.keySet().iterator();
Minute minute;
while (it.hasNext()) {
minute = (Minute) it.next();
timeSeries.add(minute, (Double) data.get(minute));
}
創建用來繪製移動平均線的數據集實例,代碼如下:
TimeSeries average1 = MovingAverage.createMovingAverage(timeSeries,
"每1小時平均漲幅百分比", 60, 0); // 繪製1小時移動平均線
TimeSeries average2 = MovingAverage.createMovingAverage(timeSeries,
"每2小時平均漲幅百分比", 120, 0); // 繪製2小時移動平均線
TimeSeries average4 = MovingAverage.createMovingAverage(timeSeries,
"每4小時平均漲幅百分比", 240, 0); // 繪製4小時移動平均線
將數據集實例和移動平均線數據集實例添加到TimeSeriesCollection類的實例中,代碼如下:
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(timeSeries);
dataset.addSeries(average1);
dataset.addSeries(average2);
dataset.addSeries(average4);