【TeeChart for Java教程】(七)下:使用函数——功能期、周期样式和派生自定义功能

【下载TeeChart for Java最新版本】

1 功能期

Period是使用函数的重要方法,因为Period定义了循环应用Function的点的范围。

line1.getFunction().setPeriod(2);

teechart_for_java

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

teechart_for_java
Period = Month.TotalDays and PeriodAligns.Last

在这种情况下,“average”是在月初绘制的。

teechart_for_java

3 派生自定义功能

创建一个新的Function组件只是创建一个派生自Function类的新组件(它也可以从现有函数派生)。 在TTeeFunction中有两个重要的虚拟方法可以被覆盖以创建一个新的Function类型。

  1. Function.Calculate: public virtual double Calculate(Series Source,int First,int Last)
  2. Function.CalculateMany: public virtual double CalculateMany(ArrayList SourceSeries, int ValueIndex)

如果只有一个系列是数据源,则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正版授权,请点击“咨询在线客服”哟!

Stimulsoft

标签:图表Java图表控件teechart

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年8月11日
下一篇 2018年8月12日

相关推荐

发表回复

登录后才能评论