翻譯|使用教程|編輯:王香|2018-09-14 16:49:33.000|閱讀 287 次
概述:本文詳細(xì)介紹了在TeeChart for Java使用函數(shù)中的功能期、周期樣式和派生自定義功能。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
【下載TeeChart for Java最新版本】
在上一篇文章中,講到使用函數(shù)中功能類型的功能特點(diǎn)、添加功能和定義數(shù)據(jù)源,在本文中將介紹其余三種,功能期、周期樣式和派生自定義功能。
Period是使用函數(shù)的重要方法,因?yàn)镻eriod定義了循環(huán)應(yīng)用Function的點(diǎn)的范圍。
例:我們有6個(gè)數(shù)據(jù)點(diǎn)(例如Bar系列的條形圖),其值為:3,8,6,2,9和12。定義一個(gè)具有周期0的函數(shù)系列(默認(rèn)),繪制的平均值為:6.667,將Period設(shè)置為2,我們得到3個(gè)平均值作為函數(shù)的輸出:5.5,4和10.5。這些值將在其周期范圍內(nèi)集中繪制,即。輸入系列的第1和第2欄之間的第1個(gè)值,第3和第4欄之間的第2個(gè)值等。您可以通過在圖表編輯器中選擇函數(shù)來定義Period,也可以使用FunctionType在運(yùn)行時(shí)修改Period。例如:系列2是功能系列:
line1.getFunction().setPeriod(2);
期間可以定義為范圍。這在使用DateTime系列時(shí)非常有用,我們希望將函數(shù)的“Period”表示為TimeStep。屬性“PeriodStyle”控制如何表達(dá)“Period”?例如,您現(xiàn)在可以使用日期時(shí)間源系列上的常規(guī)“Average”功能繪制“monthly average of sales”功能,并將功能期間設(shè)置為“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(); }
這將產(chǎn)生幾個(gè)點(diǎn),每個(gè)點(diǎn)顯示BarSeries中每個(gè)月數(shù)據(jù)的“average”。在計(jì)算日期時(shí)間段的函數(shù)時(shí),必須按源日期對(duì)源系列中的點(diǎn)進(jìn)行排序。該范圍也可用于非日期時(shí)間序列:
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);
這將計(jì)算每個(gè)“6”區(qū)間內(nèi)每組點(diǎn)的平均值。(X > = 6,X < 6 的點(diǎn)將用于計(jì)算第一個(gè)平均值,X> = 6的點(diǎn),X < 12將用于計(jì)算第二個(gè)平均值,依此類推......)。 請(qǐng)注意,這與計(jì)算每6個(gè)點(diǎn)的平均值不同。使用“Period Alignment”屬性可以對(duì)齊“Series”范圍內(nèi)的功能點(diǎn)。以下將繪制每月結(jié)束時(shí)的功能點(diǎn):
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”是在月初繪制的。
創(chuàng)建一個(gè)新的Function組件只是創(chuàng)建一個(gè)派生自Function類的新組件(它也可以從現(xiàn)有函數(shù)派生)。 在TTeeFunction中有兩個(gè)重要的虛擬方法可以被覆蓋以創(chuàng)建一個(gè)新的Function類型。
如果只有一個(gè)系列是數(shù)據(jù)源,則Calculate方法用于計(jì)算函數(shù)結(jié)果。如果多個(gè)系列可以是數(shù)據(jù)源,則CalculateMany用于計(jì)算函數(shù)結(jié)果。示例:創(chuàng)建新的SquareSum功能。需要一個(gè)SquareSum函數(shù)來返回“sum of squares平方和”。此函數(shù)只能有一個(gè)數(shù)據(jù)源或多個(gè)數(shù)據(jù)源,因此我們將覆蓋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點(diǎn)以計(jì)算平方和。“ValueList”方法用于提取必需的Steema.TeeChart.ValueList,以使該類適用于像HorizBarSeries這樣的Series類型,其中“XValues”保存點(diǎn)值而不是“YValues”。當(dāng)Series 只有一個(gè) Series作為DataSource 時(shí),使用“Calculate”方法。當(dāng)Series有多個(gè)Series作為數(shù)據(jù)源時(shí),將調(diào)用“CalculateMany”方法。對(duì)于源系列中的每個(gè)點(diǎn),“CalculateMany”將被調(diào)用一次,從零開始,以所有數(shù)據(jù)源的最小點(diǎn)數(shù)結(jié)束。 理解Calculate和CalculateMany之間的區(qū)別非常重要。當(dāng)只有一個(gè)數(shù)據(jù)源并且只調(diào)用一次時(shí)調(diào)用“Calculate”。當(dāng)有多個(gè)Series作為數(shù)據(jù)源時(shí),會(huì)多次調(diào)用“CalculateMany”(每個(gè)點(diǎn)一個(gè))。
購買Steema正版授權(quán),請(qǐng)點(diǎn)擊“”喲!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn