【TeeChart .NET教程】(七)使用函数

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

上一篇:【TeeChart .NET教程】(六)使用系列

【下载TeeChart.Net最新版本】

(一)功能类型

1.1 功能类型

TeeChart Pro功能是一个系列,几乎可以是任何系列类型,应用代数功能,数据源是另一个图表系列。所有函数都派生自Steema.TeeChart.Functions命名空间中的Function类,并继承Function的 Period属性。TeeChart Pro提供以下预定义功能列表:

teecahrt

多种功能类型仅支持一个输入系列。但是,可以链接链接函数,例如,将图表中多个系列的平均值创建为平均函数系列,然后使用平均函数作为趋势函数的输入来标识平均值的趋势。

添加功能

使用TeeChart Editor,在First Chart页面上,选择Add按钮,就像将新系列添加到Chart中一样。在TeeChart Gallery中,选择Functions选项卡以选择所需的功能。每个功能都显示为一个系列,用户可以稍后通过选择第一个图表页面上的更改按钮来更改与该功能关联的系列类型。之后,在函数系列的“数据源”页面上可以轻松更改函数定义。在这里,同样容易,用户可以将已添加到Chart的正常Series的定义更改为Function的定义(Function实际上是数据源的定义,而不是Series Type的定义)。下图显示了编辑函数时的“数据源”页面。线系列(标题“line2”)已定义。数据源页面底部的左侧列表框显示了可供输入的图表中的其他系列(此处为“line1”)。

teecahrt

从一个完全空的Chart开始,这里是代码中用于构建简单的Series-Function相关Chart的步骤。

[C#.Net]

private void Form1_Load(object sender, System.EventArgs e) //Add a data Series Line line1 = new Line(tChart1.Chart); //Populate it with data (here random) line1.FillSampleValues(10); //Add a series to be used for an Average Function Line line2 = new Line(tChart1.Chart); //Define the Function Type for the new Series Steema.TeeChart.Functions.Average average1 = new Steema.TeeChart.Functions.Average(); line2.Function = average1; //Define the Datasource for the new Function Series line2.DataSource = line1; //*Note - When populating your input Series manually you will need to  //use the Checkdatasource method  //- See the section entitled 'Defining a Datasource' //Change the Period of the Function so that it groups averages //every 2 Points line2.Function.Period = 2; line2.CheckDataSource();

[VB.Net]

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Add a data Series Dim Line1 As New Steema.TeeChart.Styles.Line(TChart1.Chart) 'Populate it with data (here random) Line1.FillSampleValues(10) 'Add a series to be used for an Average Function Dim Line2 As New Steema.TeeChart.LineSeries(TChart1.Chart) 'Define the Function Type for the new Series Dim Average1 As New Steema.TeeChart.Functions.Average() Line2.Function = Average1 'Define the Datasource for the new Function Series Line2.DataSource = Line1 '*Note - When populating your input Series manually you will need to  'use the Checkdatasource method  '- See the section entitled 'Defining a Datasource' 'Change the Period of the Function so that it groups averages 'every 2 Points Line2.Function.Period = 2 Line2.CheckDataSource() 
End Sub

添加另一个函数来获取有关前一个函数的信息

[C#.Net]

private void button1_Click(object sender, System.EventArgs e) //Let's change to 2D for visibility tChart1.Aspect.View3D = false; //Add another Series to be used for a 2nd Function  Line line3 = new Line(tChart1.Chart); //Define the Function Type for the new Series  Steema.TeeChart.Functions.High high1 = new Steema.TeeChart.Functions.High(); line3.Function = high1; //Define the Datasource for the new Function Series  //Use the existing Function (Series2) as input  line3.DataSource = tChart1.Series[1]; //Leave the Period at default 0 (No Period set) to draw  //A line at Highest of all points of the Average Function

[VB.Net]

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Let's change to 2D for visibility TChart1.Aspect.View3D = False 'Add another Series to be used for a 2nd Function  Dim Line3 As New Steema.TeeChart.LineSeries(TChart1.Chart) 'Define the Function Type for the new Series  Dim High1 As New Steema.TeeChart.Functions.High() Line3.Function = High1 'Define the Datasource for the new Function Series  'Use the existing Function (Series2) as input  Line3.DataSource = TChart1.Series(1) 'Leave the Period at default 0 (No Period set) to draw  'A line at Highest of all points of the Average Function  
End Sub

1.2 定义数据源

上一节中的示例重点介绍如何使用Datasource通过代码填充Function。Series使用datasource定义Function的输入或定义Series ADO.NET数据源。使用TeeChart编辑器,在添加函数后,函数系列的“Datasource”页面将显示包含在函数定义中的可用系列列表。可以更改要应用于系列的函数类型,并从左侧列表框“Available”中选择系列,并将它们添加到右侧列表框“Selected”,按代码的数据源使用Series.Datasource属性。

例;

假设在设计时通过TeeChart编辑器添加了2个数据系列,添加了一个由2系列的平均值组成的函数:

[C#.Net]

private void Form1_Load(object sender, System.EventArgs e) tChart1.Aspect.View3D = false; bar1.FillSampleValues(10); bar2.FillSampleValues(10); private void button1_Click(object sender, System.EventArgs e) Steema.TeeChart.Styles.Line line1 = new Steema.TeeChart.Styles.Line(tChart1.Chart); Steema.TeeChart.Functions.Average average1 = new Steema.TeeChart.Functions.Average();  line1.DataSource = new object[]  this.bar2,this.bar1; line1.Function = average1; line1.Marks.Visible = true;

[VB.Net]

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TChart1.Aspect.View3D = False Bar1.FillSampleValues(10) Bar2.FillSampleValues(10) 
End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim DataSource As New ArrayList() DataSource.Add(Bar1) DataSource.Add(Bar2) Dim Line1 As New Steema.TeeChart.Styles.Line(TChart1.Chart) Dim Average1 As New Steema.TeeChart.Functions.Average() Line1.Function = Average1 Line1.DataSource = DataSource 
End Sub

为2系列添加点数:

[C#.Net]

private void button2_Click(object sender, System.EventArgs e) Random rnd = new Random(); for(int i = 0; i < 10; ++i) bar1.Add(rnd.Next(500)); bar2.Add(rnd.Next(500));

[VB.Net]

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim rnd As New Random() Dim i As Integer For i = 0 To 10 Bar1.Add(rnd.Next(500)) Bar2.Add(rnd.Next(500)) Next 
End Sub

请注意,该功能不会显示,需要在Button2_Click()事件中添加Series.CheckDatasource方法以读取Function的值。

[C#.Net]

tChart1.Series [2] .CheckDataSource();

[VB.Net]

TChart1.Series(2).CheckDataSource()

可以在运行时更改函数定义,只需重新定义Series.DataSource属性即可为系列分配新函数:

[C#.Net]

private void button3_Click(object sender, System.EventArgs e) Steema.TeeChart.Functions.Cumulative cumulative1 = new Steema.TeeChart.Functions.Cumulative(); tChart1.Series[2].Function = cumulative1;

[VB.Net]

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim Cumulative1 As New Steema.TeeChart.Functions.Cumulative() TChart1.Series(2).Function = Cumulative1 
End Sub

1.3 功能周期

周期是使用函数的重要属性,因为周期定义了循环应用函数的点的范围。

示例

有6个数据点(例如条形系列的条形),其值为: 3,8,6,2,9和12。定义一个具有周期0的函数系列(默认),绘制的平均值为:6.667。将周期设置为2我们得到3个平均值作为函数的输出:5.5,4和10.5。这些值将在它们的周期范围中集中绘制,即输入系列的第1和第2条之间的第1个值,第3和第4个条之间的第2个值等..通过在“Datasource”页面中选择相关的“Series and Function”并单击“Options”选项卡来定义“Period ”,也可以使用“FunctionType”在运行时修改“Period ”。

例如,line1是函数系列:

[C#.Net]

line1.Function.Period = 2;

[VB.Net]

Line1.Function.Period = 2

下面是2个图表突出显示应用的周期

teecahrtteecahrt

1.4 时间段样式

周期的效果可以定义为范围,这在使用DateTime系列时非常有用,将函数的“Period”表示为TimeStep,属性“PeriodStyle”控制如何表达“Period”。例如,可以使用日期时间源系列上的常规“Average”功能绘制“monthly average of sales”功能,并将功能期间设置为“one month”:

[C#.Net]

private void Form1_Load(object sender, System.EventArgs e)  //Add in a BarSeries and Average Function at design-time. Random rnd = new Random(); tChart1.Aspect.View3D = false;   TimeSpan month = new TimeSpan(30,0,0,0); DateTime today = DateTime.Today; bar1.Marks.Visible = false; bar1.XValues.DateTime = true; tChart1.Axes.Bottom.Labels.Angle = 90; for(int i = 0; i < 60; ++i)  today = today.AddDays(5); bar1.Add(today, rnd.Next(100),"",Color.Red); average1.PeriodAlign = Steema.TeeChart.Functions.PeriodAligns.First; average1.PeriodStyle = Steema.TeeChart.Functions.PeriodStyles.Range; average1.Period = month.TotalDays; line1.DataSource = bar1; line1.CheckDataSource();

[VB.Net]

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Add in a BarSeries and Average Function at design-time. TChart1.Aspect.View3D = False Dim Month As New TimeSpan(30, 0, 0, 0) Dim Today As DateTime = DateTime.Today Dim i As Integer Bar1.Marks.Visible = False Bar1.XValues.DateTime = True TChart1.Axes.Bottom.Labels.Angle = 90 For i = 0 To 60 Today = Today.AddDays(5) Bar1.Add(Today, Rnd() * 100, "", Color.Red) Next Average1.PeriodAlign = Steema.TeeChart.Functions.PeriodAligns.First Average1.PeriodStyle = Steema.TeeChart.Functions.PeriodStyles.Range Average1.Period = Month.TotalDays Line1.DataSource = Bar1 Line1.CheckDataSource() 
End Sub

这将产生几个点,每个点显示BarSeries中每个月数据的“average”,在计算日期时间段的函数时,必须按源日期对源系列中的点进行排序,该范围也可用于非日期时间序列:

[C#.Net]

for(int i = 0; i < 60; ++i)  bar1.Add(Convert.ToDouble(i), rnd.Next(100),"",Color.Red); average1.PeriodAlign = Steema.TeeChart.Functions.PeriodAligns.First; 
average1.PeriodStyle = Steema.TeeChart.Functions.PeriodStyles.Range; 
average1.Period = 6;

[VB.Net]

For i = 0 To 60 Bar1.Add(i, Rnd() * 100, "", Color.Red) 
Next 
Average1.PeriodAlign = Steema.TeeChart.Functions.PeriodAligns.First 
Average1.PeriodStyle = Steema.TeeChart.Functions.PeriodStyles.Range 
Average1.Period = 6

这将计算每个“6”区间内每组点的平均值。(X > = 6,X < 6的点将用于计算第一个平均值,X> = 6的点,X < 12将用于计算第二个平均值,依此类推......),这与计算每6个点的平均值不同。使用“周期对齐”属性可以对齐“系列”范围内的功能点,以下将绘制每月结束时的功能点:

[C#.Net]

average1.PeriodAlign = Steema.TeeChart.Functions.PeriodAligns.First; 
average1.PeriodStyle = Steema.TeeChart.Functions.PeriodStyles.Range; 
average1.Period = month.TotalDays;

[VB.Net]

Average1.PeriodAlign = Steema.TeeChart.Functions.PeriodAligns.First 
Average1.PeriodStyle = Steema.TeeChart.Functions.PeriodStyles.Range 
Average1.Period = Month.TotalDays

Period = Month.TotalDays and PeriodAligns.First,从下图中可以看出,“average”是在月末绘制的。

teecahrt

Period = Month.TotalDays and PeriodAligns.Last,在这种情况下,“average”是在月初绘制的。

teecahrt

1.5 派生自定义函数

创建新的Function组件只是创建一个派生自Function类的新组件(它也可以从现有的函数类派生),Function中有两个重要的虚拟方法可以重写以创建新的Function类型。 1)Function.Calculate:public virtual double Calculate(Series Source,int First,int Last) 2)Fu​​nction.CalculateMany:public virtual double CalculateMany(ArrayList SourceSeries,int ValueIndex) 如果只有一个系列用作数据源,则Calculate方法用于计算函数结果。如果多个系列可用作数据源,则CalculateMany用于计算函数结果。

示例:创建新的SquareSum功能,需要一个SquareSum函数来返回“sum of squares(平方和)”,此函数只能有一个数据源或多个数据源,因此我们将覆盖Calculate和CalculateMany方法。

[C#.Net]

public class SquareSum : Steema.TeeChart.Functions.Function  public SquareSum(): base()  public SquareSum(Steema.TeeChart.Chart c): base(c)  public override double Calculate(Series SourceSeries,int FirstIndex,int LastIndex)   ValueList v=ValueList(SourceSeries); if ( FirstIndex==-1 ) return v.Total; else  double result=0; for (int t=FirstIndex; t<=LastIndex; t++)   result+=Math.Sqrt(v[t]); return result; public override double CalculateMany(ArrayList SourceSeriesList,int ValueIndex)  ValueList v; double result=0; for (int t=0; tValueIndex )   result+=Math.Sqrt(v[ValueIndex]); return result;

[VB.Net]

Public Class SquareSum Inherits Steema.TeeChart.Functions.Function Public Sub New() MyBase.New() End Sub Public Sub New(ByVal c As Steema.TeeChart.Chart) MyBase.New(c) End Sub Public Overrides Function Calculate(ByVal Source As Steema.TeeChart.Series, ByVal First As Integer, ByVal Last As Integer) As Double Dim v As Steema.TeeChart.ValueList Dim t As Integer v = ValueList(Source) If First = -1 Then Return v.Total Else Dim Result As Double = 0 For t = First To t < Last Result += Math.Sqrt(v(t)) Next Return Result End If End Function Public Overrides Function CalculateMany(ByVal SourceSeries As System.Collections.ArrayList, ByVal ValueIndex As Integer) As Double Dim v As Steema.TeeChart.ValueList Dim Result As Double = 0 Dim t As Integer For t = 0 To t < SourceSeries.Count v = ValueList(CType(SourceSeries(t), Steema.TeeChart.Series)) If v.Count > ValueIndex Then Result += Math.Sqrt(v(ValueIndex)) End If Next Return Result End Function 
End Class

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”(每个点一个)。

转载于:https://my.oschina.net/u/3905944/blog/1920995

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django的简介

一.MTV模型 Django的MTV模式: Model(模型):和数据库相关的.负责业务对象与数据库的对象(ORM) Template(,模板):放所有的HTML文件 模板语法:目的是将变量(数据库内容)如何巧妙的镶嵌到HTML页面中 View(视图):负责业务逻辑,并在适当的时候调用Model和Template 此外Django还有一个…

狗窝里的小日子- 3 ...

来&#xff0c;把平时作的菜菜整理下&#xff1a; 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.

5种流行的Linux发行版:你更喜欢哪一个呢?

现如今&#xff0c;对于各种类型的用户&#xff08;如桌面用户、服务器管理员、图形设计者等&#xff09;而言Linux已经成为一种最流行的操作系统。Linux是免费且开源的&#xff0c;任何人都可以建立和编译它的源代码&#xff0c;并将它分发给别人。这就是为什么Linux会有很多个…

基于ASP.net耳机网店商城系统(前台页面+后台页面)

源码https://github.com/doublekai/user web文件夹 转载于:https://www.cnblogs.com/doublekai/p/9778246.html

狗窝里的小日子- 4 ...

来&#xff0c;把平时作的菜菜整理下&#xff1a; 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.

[Web 前端] 解决因inline-block元素导致的空白间距和元素下沉

cp from : https://www.jianshu.com/p/617e78a27c88 ** 前言&#xff1a; ** CSS 中的 display:inline-block 是笔者最为喜欢的元素之一&#xff0c;可以将原本占据一行的块级元素&#xff0c;转变为可以并列显示的行内块级元素。 display:inline-block 常被用来代替float进行页…

狗窝里的小日子- 5 ...

来&#xff0c;把平时作的菜菜整理下&#xff1a; 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.

Linux(RadHat)基础学习—FTP服务

RedHat下的ftp服务 1.ftp服务的启动 1.编辑文件&#xff1a;vim /etc/sysconfig/selinux第6行selinuxdisabled保存退出。重启主机。 2.安装vsftpd yum install vsftpd -y 安装完成&#xff1a; 开启ftp服务&#xff1a; systmctl start vsftpd systemctl enable vsftpd 3.防火墙…

手机贴膜利润超百倍 消费者为无用功能高价买单

摘要&#xff1a;市场研究机构IDC的最新报告预计&#xff0c;2013年智能手机出货量将首次超过功能手机&#xff0c;国家工信部的数据显示&#xff0c;截至2011年底&#xff0c;我国智能手机用户已超过1.9亿。记者调查发现&#xff0c;在从事手机贴膜的摊点上&#xff0c;摊主多…

java内存区域及静态常量池、运行时常量池介绍

java内存区域介绍 我们先来介绍下虚拟机运行时数据区的结构&#xff1a; 我们项目中的每一个线程在运行时&#xff0c;都会有拥有自己独立的栈数据和程序计数器。程序计数器可以看作字节码命令的指示器&#xff0c;记录了下个需要执行的字节码指令&#xff0c;栈数据主要分为本…

狗窝里的小日子- 6 ...

来&#xff0c;把平时作的菜菜整理下&#xff1a; 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.

数据库常见面试题总结

参考如下: 数据库常见面试题(开发者篇) 数据库优化 SQL数据库面试题及答案 常见面试题整理--数据库篇转载于:https://www.cnblogs.com/threetop/p/9425172.html

狗窝里的小日子- 7 ...

来&#xff0c;把平时作的菜菜整理下&#xff1a; 71. 72. 73. 74. 75. 76. 77. 78. 79. 80.

[转]CNN目标检测(一):Faster RCNN详解

https://blog.csdn.net/a8039974/article/details/77592389 Faster RCNN github : https://github.com/rbgirshick/py-faster-rcnn Faster RCNN paper : https://arxiv.org/abs/1506.01497 Bound box regression详解 : http://download.csdn.net/download/zy1034092330/9940097…

狗窝里的小日子- 8 ...

来&#xff0c;把平时作的菜菜整理下&#xff1a; 81. 82. 83. 84. 85. 86. 87. 88.

【模式识别与机器学习】——3.9势函数法:一种确定性的非线性分类方法

目的 用势函数的概念来确定判别函数和划分类别界面。 基本思想 假设要划分属于两种类别ω1和ω2的模式样本&#xff0c;这些样本可看成是分布在n维模式空间中的点xk。 把属于ω1的点比拟为某种能源点&#xff0c;在点上&#xff0c;电位达到峰值。 随着与该点距离的增大&a…

超详细 - SVN下载安装及使用教程

SVN简介&#xff1a; 为什么要使用SVN&#xff1f; 程序员在编写程序的过程中&#xff0c;每个程序员都会生成很多不同的版本&#xff0c;这就需要程序员有效的管理代码&#xff0c;在需要的时候可以迅速&#xff0c;准确取出相应的版本。 Subversion是什么&#xff1f; 它是一…

docker 中不能用vim编辑文件

2019独角兽企业重金招聘Python工程师标准>>> docker 中不能用vim编辑文件 2017年08月28日 16:54:29 阅读数&#xff1a;2061 更新来源 apt-get update 1安装vim apt-get install -y vim 转载于:https://my.oschina.net/u/3367404/blog/1923901

洛谷 2759 奇怪的函数

【题解】 取个对数然后二分即可。对于一个数x&#xff0c;x^x的位数就是(int)(lg(x)*x1). 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #include<cmath>5 #define LL long long6 #define rg register7 #define N 2000108 using name…

IPv6 解说 ,与IPv4的同异

见&#xff1a;https://baike.baidu.com/item/IPv6/172297 IPv6 IPv6是Internet Protocol Version 6的缩写&#xff0c;其中Internet Protocol译为“互联网协议”。IPv6是IETF&#xff08;互联网工程任务组&#xff0c;Internet Engineering Task Force&#xff09;设计的用于替…