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

在上一篇文章中,讲到使用函数中功能类型的功能特点、添加功能和定义数据源,在本文中将介绍其余三种,功能期、周期样式和派生自定义功能。

1 功能期

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);

6912ce290dbbe39292e39f49ccbf1c70.gif

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

0d1cebee84aa86679943ec29f755f76b.png

Period = Month.TotalDays and PeriodAligns.Last

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

88e71d8915f50fb30fea9e7c9b940e4b.png

3 派生自定义功能

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

Function.Calculate: public virtual double Calculate(Series Source,int First,int Last)

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正版授权,请点击“咨询在线客服”哟!

e35c59096372e1c183dbc7096a835750.png

标签:图表Java图表控件teechart

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,尊重他人劳动成果

a6e1590ae4b228073faff3806334194e.png0

好文不易,鼓励一下吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值