彩票走势图

TeeChart for .NET图表控件教程:如何与使用函数

翻译|使用教程|编辑:杨鹏连|2021-06-29 11:04:51.473|阅读 237 次

概述:TeeChart Pro函数是一个系列,几乎可以是任何系列类型,对其应用一个代数函数,其数据源是另一个图表系列。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

TeeChart for .NET优秀的 4.0 WinForm 图表控件,官方独家授权汉化,集功能全面、性能稳定、价格优惠等优势。NET 的 TeeChart for .NET 中文版承诺让您在使用和学习上没有语言障碍,至少可以节省30%的开发时间。

点击立即下载最新版TeeChart for .NET

功能类型 

函数的特点 

TeeChart Pro函数是一个系列,几乎可以是任何系列类型,对其应用一个代数函数,其数据源是另一个图表系列。

所有的函数都源自Steema.TeeChart.Functions命名空间中的Function类,并继承Function的Period属性。TeeChart Pro提供了以下预定义函数的列表。

一些函数类型只支持一个输入系列。然而,可以将函数连锁起来,例如,在你的图表中取几个系列的平均值来创建一个平均函数系列,然后通过使用平均函数作为趋势函数的输入来确定平均值的趋势。

添加一个函数 

在TeeChart编辑器中,在 "第一个图表 "页面上,选择 "添加 "按钮,就像在图表中添加一个新系列一样。在TeeChart图库中选择函数标签,选择你需要的函数。每个函数都是以线型系列的形式出现的,你可以通过在第一个图表页面上选择 "改变 "按钮来改变与该函数相关的系列类型。之后在函数系列的数据源页面上可以很容易地改变函数的定义。在这里,你也可以很容易地把你添加到图表中的普通系列的定义改为函数的定义(函数实际上是数据源的定义,而不是系列类型的定义)。

下面的图片显示了编辑函数时的数据源页面。线性系列(标题为 "line2")已经定义。数据源页面底部的左侧列表框显示了图表中可供输入的其他系列(这里是 "line1")。

假设我们从一个完全空白的图表开始,下面是建立一个简单的系列-函数相关图表的代码步骤。
[C#] 
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 

We can add another Function to tell us something about the previous Function 
[C#] 
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 
定义一个数据源 

上一节的例子强调了使用数据源来通过代码填充一个函数。系列使用datasource来定义一个Function的输入,或者定义一个系列的ADO.NET数据源(见关于访问数据库的教程)。

使用TeeChart编辑器,在添加一个函数后,函数系列的数据源页面将显示一个可用的系列列表,以纳入函数定义中。在这里,你可以改变你希望应用于系列的函数类型,从左边的列表框 "可用 "中选择系列,并将它们添加到右边的列表框 "选定 "中。

代码中的数据源使用Series.Datasource属性。

例子 

假设我们在设计时通过TeeChart编辑器在图表中添加了两个数据系列。我们添加一个由两个系列的平均值组成的函数。

[C#] 
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
We add points to the 2 Series: 
[C#] 
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 
注意,Function并没有显示。你需要在Button2_Click()事件中添加Series.CheckDatasource方法来为Function读入数值。
[C#] 
tChart1.Series[2].CheckDataSource()。
[VB.Net] 
TChart1.Series(2).CheckDataSource() 
可以在运行时改变函数定义,只需重新定义Series.DataSource属性就可以为Series分配一个新的函数。
[C#] 
private void button3_Click(object sender, System.EventArgs e) 
         
            Steema.TeeChart.Functions.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
函数周期 

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

我们有6个数据点(例如条形系列的条形),其数值为 
     3、8、6、2、9和12  
我们定义一个周期为0(默认)的函数系列,得出的平均数是。
     6.667 
当周期设置为2时,我们从函数中得到3个平均数值。
     5.5、4和10.5 
这些值将在它们的周期范围内集中绘制,即输入序列的条形图1和2之间的第一个值,条形图3和4之间的第二个值,等等。

你可以在数据源页面中选择相关的系列和函数,然后点击 "选项 "标签来定义周期,也可以在运行时使用函数类型来修改周期。

例如:其中line1是函数系列。

[C#] 
line1.Function.Period = 2。
[VB.Net] 
Line1.Function.Period = 2 
下面是2张图表,突出了应用周期的效果 


周期样式 

Period可以被定义为一个范围。当使用DateTime系列时,这是非常有用的,我们想把函数的 "Period "表达为一个TimeStep。属性 "PeriodStyle "控制 "周期 "的表达方式。

例如,你现在只需在一个日期-时间源系列上使用普通的 "平均 "函数,并将函数周期设置为 "一个月",就可以绘制 "月平均销售额 "函数。

[C#] 
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中每个月的数据的 "平均值"。

在计算日期时间段的函数时,源系列中的点应按日期排序,这是强制性的。

该范围也可用于非日期时间系列。

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#] 
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 
正如你在下图中看到的,"平均数 "被绘制在月末 
绘制。
Period = Month.TotalDays and PeriodAligns.Last 
在这种情况下,"平均数 "是在月初绘制的。

派生自定义函数 

创建一个新的Function组件就是简单地创建一个派生自Function类的新组件(也可以派生自一个现有的函数类)。在Function中,有2个重要的虚拟方法可以被重写,以创建一个新的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函数来返回 "平方之和"。 
这个函数可以只有一个数据源,也可以有多个数据源,所以我们将覆盖Calculate和CalculateMany方法。

fnnnt [C#] 
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; t<SourceSeriesList.Count; t++) 
                v=ValueList((Series)SourceSeriesList[t]); 
                if ( v.Count>ValueIndex )   
                    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变量用于 "循环 "所有SourceSeries点,以计算平方之和。

ValueList "方法用于提取强制性的Steema.TeeChart.ValueList,以使该类与HorizBarSeries类型一起工作,其中 "XValues "持有点值而不是 "YValues"。

当系列只有一个系列作为数据源时,"计算 "方法被使用。当系列有一个以上的系列作为数据源时,将调用 "CalculateMany "方法。

"CalculateMany "将为源系列中的每个点被调用一次,从零开始,以所有数据源的最小点数结束。 

了解Calculate和CalculateMany之间的区别是非常重要的。当只有一个数据源时,"计算 "被调用,而且只调用一次。当有多个系列的数据源时,"CalculateMany "会被多次调用(每个点一次)。


的TeeChart为.NET已加入在线订购,现在抢购可立享优惠!

如果你看到了可爱的动物群,欢迎加入展示区QQ:740060302

关注慧聚IT微信公众号☟☟☟,了解产品的最新动态和最新资讯。

慧聚IT

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP