翻譯|使用教程|編輯:王香|2018-09-14 16:49:33.000|閱讀 287 次
概述:本文詳細介紹了在TeeChart for Java使用函數中的功能期、周期樣式和派生自定義功能。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
【下載TeeChart for Java最新版本】
在上一篇文章中,講到使用函數中功能類型的功能特點、添加功能和定義數據源,在本文中將介紹其余三種,功能期、周期樣式和派生自定義功能。
Period是使用函數的重要方法,因為Period定義了循環應用Function的點的范圍。
例:我們有6個數據點(例如Bar系列的條形圖),其值為:3,8,6,2,9和12。定義一個具有周期0的函數系列(默認),繪制的平均值為:6.667,將Period設置為2,我們得到3個平均值作為函數的輸出:5.5,4和10.5。這些值將在其周期范圍內集中繪制,即。輸入系列的第1和第2欄之間的第1個值,第3和第4欄之間的第2個值等。您可以通過在圖表編輯器中選擇函數來定義Period,也可以使用FunctionType在運行時修改Period。例如:系列2是功能系列:
line1.getFunction().setPeriod(2);
期間可以定義為范圍。這在使用DateTime系列時非常有用,我們希望將函數的“Period”表示為TimeStep。屬性“PeriodStyle”控制如何表達“Period”?例如,您現在可以使用日期時間源系列上的常規“Average”功能繪制“monthly average of sales”功能,并將功能期間設置為“one month”:
private void Load() { //Add in a BarSeries and Average Function at design-time. java.util.Random rnd = new java.util.Random(); tChart1.getAspect().setView3D(false); DateTime today = DateTime.getToday(); bar1.getMarks().setVisible(false); bar1.getXValues().setDateTime(true); tChart1.getAxes().getBottom().getLabels().setAngle(90); for(int i = 0; i < 60; ++i) today = today.addDays(5); bar1.add(today, rnd.nextInt(100),"",Color.red); average1.setPeriodAlign(com.steema.teechart.functions.PeriodAligns.FIRST); average1.setPeriodStyle(com.steema.teechart.functions.PeriodStyles.RANGE); average1.setPeriod(30); line1.setDataSource(bar1); line1.checkDataSource(); }
這將產生幾個點,每個點顯示BarSeries中每個月數據的“average”。在計算日期時間段的函數時,必須按源日期對源系列中的點進行排序。該范圍也可用于非日期時間序列:
for(int i = 0; i < 60; ++i) bar1.add(new Double(i), rnd.nextInt(100),"",Color.red); average1.setPeriodAlign(com.steema.teechart.functions.PeriodAligns.FIRST); average1.setPeriodStyle(com.steema.teechart.functions.PeriodStyles.RANGE); average1.setPeriod(6);
這將計算每個“6”區間內每組點的平均值。(X > = 6,X < 6 的點將用于計算第一個平均值,X> = 6的點,X < 12將用于計算第二個平均值,依此類推......)。 請注意,這與計算每6個點的平均值不同。使用“Period Alignment”屬性可以對齊“Series”范圍內的功能點。以下將繪制每月結束時的功能點:
average1.setPeriodAlign(com.steema.teechart.functions.PeriodAligns.FIRST); average1.setPeriodStyle(com.steema.teechart.functions.PeriodStyles.RANGE); average1.setPeriod(com.steema.teechart.DateTime.getDaysInMonth(year,month)); Period = Month.TotalDays and PeriodAligns.First
Period = Month.TotalDays and PeriodAligns.Last
在這種情況下,“average”是在月初繪制的。
創建一個新的Function組件只是創建一個派生自Function類的新組件(它也可以從現有函數派生)。 在TTeeFunction中有兩個重要的虛擬方法可以被覆蓋以創建一個新的Function類型。
如果只有一個系列是數據源,則Calculate方法用于計算函數結果。如果多個系列可以是數據源,則CalculateMany用于計算函數結果。示例:創建新的SquareSum功能。需要一個SquareSum函數來返回“sum of squares平方和”。此函數只能有一個數據源或多個數據源,因此我們將覆蓋Calculate和CalculateMany方法。
public class SquareSum extends Function { public SquareSum() { super(); } public SquareSum(com.steema.teechart.Chart c) { super(c); } public double calculate(Series sourceSeries, int firstIndex, int lastIndex) { ValueList v = valueList(sourceSeries); if (firstIndex == -1) { return v.getTotal(); } else { double result = 0; for (int t = firstIndex; t <= lastIndex; t++) { result+=Math.sqrt(v.getValue(t)); } return result; } } public double calculateMany(ArrayList sourceSeriesList, int valueIndex) { ValueList v; double result = 0; for (int t = 0; t < sourceSeriesList.size(); t++) { v = valueList((Series) sourceSeriesList.get(t)); if (v.count > valueIndex) { result+=Math.sqrt(v.getValue(valueIndex)); } } return result; }
FirstIndex和EndIndex變量用于“loop”所有SourceSeries點以計算平方和。“ValueList”方法用于提取必需的Steema.TeeChart.ValueList,以使該類適用于像HorizBarSeries這樣的Series類型,其中“XValues”保存點值而不是“YValues”。當Series 只有一個 Series作為DataSource 時,使用“Calculate”方法。當Series有多個Series作為數據源時,將調用“CalculateMany”方法。對于源系列中的每個點,“CalculateMany”將被調用一次,從零開始,以所有數據源的最小點數結束。 理解Calculate和CalculateMany之間的區別非常重要。當只有一個數據源并且只調用一次時調用“Calculate”。當有多個Series作為數據源時,會多次調用“CalculateMany”(每個點一個)。
購買Steema正版授權,請點擊“”喲!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn