【TeeChart .NET教程】(四)軸控制
【下載TeeChart.Net最新版本】
TeeChart Pro將自動(dòng)為用戶定義所有Axis標(biāo)簽,并提供足夠的靈活性來定制用戶可能具有的任何特定要求,TeeChart Pro提供真正的多軸,它們可在設(shè)計(jì)或運(yùn)行時(shí)使用,并為Axis定義提供無數(shù)可能性和靈活性,本教程將介紹軸控制的應(yīng)用:
(一)軸控制——關(guān)鍵領(lǐng)域
1.1Scales——縮放
將系列數(shù)據(jù)添加到圖表時(shí),會(huì)自動(dòng)設(shè)置軸刻度,用戶可以使用Axis屬性在設(shè)計(jì)時(shí)或運(yùn)行時(shí)更改默認(rèn)值。
Non date-time data——非日期時(shí)間數(shù)據(jù)
添加新系列時(shí),TeeChart編輯器的Axis頁面的Scales部分將顯示Automatic selected和其他灰色選項(xiàng)。顯示的所有值均為數(shù)字。
Date-time data——日期時(shí)間數(shù)據(jù)
當(dāng)系列在Series(系列) —>General(常規(guī))頁面上將日期時(shí)間設(shè)置為true(對于該軸)時(shí),TeeChart編輯器的軸頁面的“Scales(縮放)”部分將顯示“Auto(自動(dòng)選定)”和其他灰色選項(xiàng)。值顯示為日期時(shí)間值。
自動(dòng)選擇最佳軸刻度范圍以適合用戶的數(shù)據(jù),在設(shè)計(jì)時(shí)使用TeeChart編輯器將線系列添加到圖表,然后使用以下代碼添加命令按鈕:
[C#.Net]
Random rnd = new Random(); for(int i = 0; i <= 40; ++i) line1.Add(Convert.ToDouble(i),rnd.Next(100),Color.Red);
[VB.Net]
Dim i As Integer For i = 0 To 40 Line1.Add(Convert.ToDouble(i), Rnd() * 100, Color.Red) Next i
在按鈕中運(yùn)行代碼將繪制一個(gè)包含40個(gè)隨機(jī)值的Line Series。在設(shè)計(jì)時(shí)轉(zhuǎn)到TeeChart編輯器,在“Axis(軸)”頁面的“Bottom Axis scales(底軸刻度)”部分中,將“Auto(自動(dòng))”設(shè)置為“off'(關(guān)閉)”?,F(xiàn)在可以配置軸刻度的最大值和最小值,再次運(yùn)行代碼將顯示值,具體取決于用戶為Axis配置的值,使用鼠標(biāo)右鍵可以滾動(dòng)查看剩余值。
按代碼設(shè)置軸刻度
更改最大值和最小值代碼:
[C#.Net]
Steema.TeeChart.Axis bottomAxis = tChart1.Axes.Bottom; bottomAxis.Automatic = false; bottomAxis.Maximum = 36; bottomAxis.Minimum = 5;
[VB.Net]
With TChart1.Axes.Bottom .Automatic = False .Maximum = 36 .Minimum = 5 End With
將Axis scale Maximum和Minimum設(shè)置為自動(dòng)代碼:
[C#.Net]
Steema.TeeChart.Axis bottomAxis = tChart1.Axes.Bottom; bottomAxis.AutomaticMaximum = true; bottomAxis.AutomaticMinimum = false; bottomAxis.Minimum = 5;
[VB.Net]
With TChart1.Axes.Bottom .AutomaticMaximum = True .AutomaticMinimum = False .Minimum = 5 End With
1.2 Increment——增量
用戶可以自定義軸的間隔,從Axis頁面的Scales部分選擇Desired Increment組合框,并添加所需的增量,代碼:
[C#.Net]
Steema.TeeChart.Axis bottomAxis = tChart1.Axes.Bottom; bottomAxis.Increment = 20;
[VB.Net]
With TChart1.Axes.Bottom .Increment = 20 End With
Datetime data:日期型數(shù)據(jù)
如果數(shù)據(jù)是datetime(可以通過轉(zhuǎn)到Series,General頁面將數(shù)據(jù)設(shè)置為系列的datetime),Chart-> Axis頁面的scale部分將顯示日期時(shí)間范圍。從Desired Increment組合框中顯示的范圍中選擇增量,并添加一些樣本數(shù)據(jù):
[C#.Net]
Random rnd = new Random(); DateTime today = DateTime.Today; TimeSpan oneDay = TimeSpan.FromDays(1); line1.XValues.DateTime = true; for(int i = 1; i <= 25; ++i) line1.Add(today,rnd.Next(100),Color.Red); today += oneDay;
[VB.Net]
Dim i As Integer Dim Today As DateTime = DateTime.Today Dim OneDay As TimeSpan = TimeSpan.FromDays(1) Line1.XValues.DateTime = True For i = 1 To 25 Line1.Add(Today, Rnd() * 100, Color.Red) Today = Today.Add(OneDay) Next
在運(yùn)行時(shí)更改增量:
[C#.Net]
Steema.TeeChart.Axis bottomAxis = tChart1.Axes.Bottom; bottomAxis.Increment = Steema.TeeChart.Utils.GetDateTimeStep(Steema.TeeChart.DateTimeSteps.TwoDays);
[VB.Net]
With TChart1.Axes.Bottom .Increment = Steema.TeeChart.Utils.GetDateTimeStep(Steema.TeeChart.DateTimeSteps.TwoDays) End With
有關(guān)日期軸標(biāo)簽的更多信息,請參閱AxisLabels.ExactDateTime屬性。
注意:
更改軸標(biāo)簽頻率時(shí),TeeChart將根據(jù)AxisLabels.Separation屬性的設(shè)置避免標(biāo)簽重疊。這意味著如果標(biāo)簽頻率太高而不適合標(biāo)簽,那么TeeChart將分配“最適合”。更改標(biāo)簽角度和標(biāo)簽分離是2個(gè)選項(xiàng),可幫助用戶安裝所需的標(biāo)簽。
1.3 Titles——標(biāo)題
標(biāo)題設(shè)置在Axis頁面的標(biāo)題部分,用戶可以更改Axis的標(biāo)題文本及其字體和陰影屬性,還可以指定標(biāo)題文本的角度和大小。
注意:
更改軸標(biāo)簽頻率時(shí),TeeChart將根據(jù)AxisLabels.Separation屬性的設(shè)置避免標(biāo)簽重疊。這意味著如果標(biāo)簽頻率太高而不適合標(biāo)簽,那么TeeChart將分配“最適合”。更改標(biāo)簽角度和標(biāo)簽分離是2個(gè)選項(xiàng),可幫助用戶安裝所需的標(biāo)簽。
1.4 標(biāo)簽格式:
用戶可以將所有標(biāo)準(zhǔn)數(shù)字和日期格式應(yīng)用于Axis標(biāo)簽。“Axis(軸)”頁面的“Labels(標(biāo)簽)”部分包含“Values format(值格式)”字段。如果數(shù)據(jù)是datetime,則字段名稱將更改為“Date time format”,在運(yùn)行時(shí)使用代碼:
[C#.Net]
tChart1.Axes.Bottom.Labels.ValueFormat = "#,##0.00;(#,##0.00)";
[VB.Net]
With TChart1.Axes.Bottom .Labels.ValueFormat = "#,##0.00;(#,##0.00)" End With
或者用于日期時(shí)間數(shù)據(jù)
[C#.Net]
tChart1.Axes.Bottom.Labels.DateTimeFormat =“dddd / MMMM / yyyy”;
[VB.Net]
With TChart1.Axes.Bottom .Labels.DateTimeFormat = "dddd/MMMM/yyyy" End With
1.5 MultiLine標(biāo)簽
軸標(biāo)簽可以顯示為多行文本而不是單行文本,使用LineSeparator字符()分隔行。
例:
[C#.Net]
bar1.Add(1234,“New”+ Steema.TeeChart.Texts.LineSeparator +“Cars”,Color.Red); bar1.Add(2000,“Old”+ Steema.TeeChart.Texts.LineSeparator +“Bicycles”,Color.Red); tChart1.Panel.MarginBottom = 10;
[VB.Net]
Bar1.Add(1234, "New" + Steema.TeeChart.Texts.LineSeparator + "Cars", Color.Red) Bar1.Add(2000, "Old" + Steema.TeeChart.Texts.LineSeparator + "Bicycles", Color.Red) TChart1.Panel.MarginBottom = 10
DateTime標(biāo)簽的示例:
以下將在兩行文本中顯示底部軸標(biāo)簽,一行顯示月份和日期,第二行顯示年份:
- Feb-28 Mar-1 ..
- 2003 2003 ..
[C#.Net]
bar1.Add(DateTime.Parse(“28/2/2003”),100,Color.Red); bar1.Add(DateTime.Parse(“1/3/2003”),200,Color.Red); bar1.Add(DateTime.Parse(“2/3/2003”),150,Color.Red); bar1.XValues.DateTime = true; tChart1.Axes.Bottom.Labels.DateTimeFormat =“MM / dd hh:mm”; tChart1.Axes.Bottom.Labels.MultiLine = true; tChart1.Panel.MarginBottom = 10;
[VB.Net]
Bar1.Add(DateValue("28/2/2003"), 100, Color.Red) Bar1.Add(DateValue("1/3/2003"), 200, Color.Red) Bar1.Add(DateValue("2/3/2003"), 150, Color.Red) Bar1.XValues.DateTime = True TChart1.Axes.Bottom.Labels.DateTimeFormat = "MM/dd hh:mm" TChart1.Axes.Bottom.Labels.MultiLine = True TChart1.Panel.MarginBottom = 10
將AxisLabels.MultiLine屬性設(shè)置為True將自動(dòng)在有空格的行中拆分標(biāo)簽,有效地將Label分為兩個(gè):
第一行:'mm / dd'
第二行:'hh:mm'
在運(yùn)行時(shí)始終可以使用OnGetAxisLabel事件以編程方式將標(biāo)簽拆分為多行:
[C#.Net]
private void tChart1_GetAxisLabel(object sender, Steema.TeeChart.TChart.GetAxisLabelEventArgs e) string myLabelText = e.LabelText; tChart1.Axes.Bottom.Labels.SplitInLines(ref myLabelText, " "); e.LabelText = myLabelText;
[VB.Net]
Private Sub TChart1_GetAxisLabel(ByVal sender As Object, ByVal e As Steema.TeeChart.TChart.GetAxisLabelEventArgs) Handles TChart1.GetAxisLabel Dim myLabelText As String myLabelText = e.LabelText TChart1.Axes.Bottom.Labels.SplitInLines(myLabelText, " ") e.LabelText = myLabelText End Sub
在上面的示例中,全局“TeeSplitInLines”過程將“LabelText”中的所有空格轉(zhuǎn)換為行分隔符(返回),軸AxisLabels.Angle屬性也可用于多線軸標(biāo)簽。
Customising Axis labels——自定義軸標(biāo)簽
可以通過使用Axis事件獲得進(jìn)一步的Label控制。事件允許用戶激活/停用/更改任何單個(gè)Axis標(biāo)簽。以下示例修改每個(gè)Label,將文本短語放在點(diǎn)索引值的前面:
[C#.Net]
private void button1_Click(object sender, System.EventArgs e) bar1.FillSampleValues(20); tChart1.Axes.Bottom.Labels.Style = AxisLabelStyle.Mark; private void tChart1_GetAxisLabel(object sender, Steema.TeeChart.TChart.GetAxisLabelEventArgs e) if(((Steema.TeeChart.Axis)sender).Equals(tChart1.Axes.Bottom)) e.LabelText = "Period " + Convert.ToString(e.ValueIndex);
[VB.Net]
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Bar1.FillSampleValues(20) TChart1.Axes.Bottom.Labels.Style = Steema.TeeChart.AxisLabelStyle.Mark End Sub Private Sub TChart1_GetAxisLabel(ByVal sender As Object, ByVal e As Steema.TeeChart.TChart.GetAxisLabelEventArgs) Handles TChart1.GetAxisLabel If CType(sender, Steema.TeeChart.Axis) Is TChart1.Axes.Bottom Then e.LabelText = "Period " & e.ValueIndex End If End Sub
1.6 Logarithmic Labels——指數(shù)標(biāo)簽
正常對數(shù)標(biāo)記可以通過以下方式設(shè)置:
[C#.Net]
private void button1_Click(object sender, System.EventArgs e) Random rnd = new Random(); Steema.TeeChart.Axis leftAxis = tChart1.Axes.Left; tChart1.Aspect.View3D = false; bar1.Marks.Visible = false; for(int i = 0; i <= 100; ++i) bar1.Add(rnd.Next(100) * i); leftAxis.LogarithmicBase = 10; leftAxis.Logarithmic = true; leftAxis.SetMinMax(0, 10000); leftAxis.Labels.ValueFormat = "#e+0";
[VB.Net]
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer TChart1.Aspect.View3D = False Bar1.Marks.Visible = False For i = 0 To 10000 Step 100 Bar1.Add(Rnd() * i) Next With TChart1.Axes.Left .LogarithmicBase = 10 .Logarithmic = True .SetMinMax(0, 10000) .Labels.ValueFormat = "#e+0" ' exponential format End With End Sub
標(biāo)簽將根據(jù)對數(shù)基數(shù)(默認(rèn)為10)進(jìn)行設(shè)置,因此,在這種情況下給出標(biāo)簽為1,10,100,1000,10000。
1.7 Ticks and Minor——勾選和次要
有3種勾選類型和2種類型的網(wǎng)格,用戶可以更改每個(gè)刻度和網(wǎng)格類型的長度,寬度和顏色??梢酝ㄟ^“Ticks”選項(xiàng)卡對Ticks及其關(guān)聯(lián)的Grid和Inner Ticks進(jìn)行更改; 可以通過“Minor(次要)”選項(xiàng)卡更改次要刻度及其關(guān)聯(lián)的網(wǎng)格。TeeChart Pro版本5的新功能是能夠更改寬度大于1(默認(rèn)值)的刻度和網(wǎng)格樣式。
[C#.Net]
Steema.TeeChart.Axis bottomAxis = tChart1.Axes.Bottom; bottomAxis.Ticks.Length = 7; bottomAxis.Ticks.Color = Color.Green; bottomAxis.MinorTickCount = 10;
[VB.Net]
With TChart1.Axes.Bottom .Ticks.Length = 7 .Ticks.Color = Color.Green .MinorTickCount = 10 End With
Axis position——軸位置
軸具有修改每個(gè)軸所在位置的屬性。在此示例中,軸移動(dòng)了圖表寬度的50%,因此它顯示在圖表中心:
[C#.Net]
Steema.TeeChart.Axis bottomAxis = tChart1.Axes.Bottom; bottomAxis.PositionUnits = PositionUnits.Percent; bottomAxis. RelativePosition = 50
[VB.Net]
With TChart1.Axes.Bottom .PositionUnits = PositionUnits.Percent .RelativePosition = 50 End With
(二)Additional Axes——附加軸
2.1 Copying axes——復(fù)制軸
TeeChart提供5個(gè)與數(shù)據(jù)相關(guān)的軸系列:Left(左),Top(上),Bottom(下),Right(右)和 Depth(深)。向圖表添加新系列時(shí),用戶可以定義系列應(yīng)與哪些軸相關(guān)(轉(zhuǎn)到“Series(系列)”選項(xiàng)卡“General(常規(guī))”頁面),可以使用Axis Customdraw方法在圖表上的任何位置重復(fù)前4軸中的任何一個(gè)(或全部)。此方法會(huì)復(fù)制Axis,但不會(huì)添加新的自定義軸。
例:
[C#.Net]
private void Form1_Load(object sender, System.EventArgs e) Random Rnd = new Random(); tChart1.Aspect.View3D = false; tChart1.Panel.Gradient.Visible = true; for(int t = 0; t <= 20; ++t) line1.Add(t, ((Rnd.Next(100)) + 1) - ((Rnd.Next(70)) + 1), Color.Red); private void line1_BeforeDrawValues(object sender, Steema.TeeChart.Drawing.Graphics3D g) int posAxis = 0; if(tChart1.Axes.Left.Maximum > 0) tChart1.Axes.Left.Draw(g.ChartXCenter - 10,g.ChartXCenter - 20,g.ChartXCenter,true); posAxis = tChart1.Axes.Left.CalcYPosValue(10); tChart1.Axes.Bottom.Draw(posAxis + 10, posAxis + 40, posAxis, true);
[VB.Net]
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim t As Integer TChart1.Aspect.View3D = False TChart1.Panel.Gradient.Visible = True For t = 0 To 20 Line1.Add(t, ((Rnd() * 100) + 1) - ((Rnd() * 70) + 1), Color.Red) Next End Sub Private Sub Line1_BeforeDrawValues(ByVal sender As Object, ByVal g As Steema.TeeChart.Drawing.Graphics3D) Handles Line1.BeforeDrawValues Dim posAxis As Integer If TChart1.Axes.Left.Maximum > 0 Then TChart1.Axes.Left.Draw(g.ChartXCenter - 10, g.ChartXCenter - 20, g.ChartXCenter, True) posAxis = TChart1.Axes.Left.CalcYPosValue(10) TChart1.Axes.Bottom.Draw(posAxis + 10, posAxis + 40, posAxis, True) End If End Sub
上面的示例代碼將生成以下圖像:
2.2 自定義軸
在此示例中,TeeChart將繪制新軸,一個(gè)水平,一個(gè)垂直位于圖表的中心。當(dāng)用戶滾動(dòng)圖表(用鼠標(biāo)右鍵拖動(dòng))時(shí),新的垂直軸將始終保持在圖表的中心,新的水平軸將垂直滾動(dòng)上下移動(dòng),新軸是默認(rèn)軸的精確副本。
2.3 多個(gè)自定義軸
與PositionPercent和拉伸屬性一起,可以使無限軸浮動(dòng)到圖表上的任何位置。滾動(dòng),縮放和軸命中檢測也適用于自定義創(chuàng)建的軸?,F(xiàn)在可以通過TeeChart Editor在設(shè)計(jì)時(shí)創(chuàng)建額外的軸,也可以在運(yùn)行時(shí)通過幾行代碼創(chuàng)建額外的軸:
通過圖表編輯器
TeeChart為用戶提供在設(shè)計(jì)時(shí)創(chuàng)建自定義軸的功能,使其能夠以TeeChart的T恤文件格式保存。打開圖表編輯器并單擊“Axis(軸)”選項(xiàng)卡,然后選擇“+”按鈕以添加自定義軸。然后選擇“Position(位置)”選項(xiàng)卡,確保突出顯示新的自定義軸。此頁面上的“ Horizontal(水平)”復(fù)選框允許用戶將新的自定義軸定義為水平軸或?qū)⑵浔A魹槟J(rèn)垂直軸。如上所述,此頁面的其余部分和Axis頁面中的其他選項(xiàng)卡可用于更改自定義軸的比例,增量,標(biāo)題,標(biāo)簽,刻度,次刻度和位置。要將此新的自定義軸與所需的數(shù)據(jù)系列相關(guān)聯(lián),請選擇“Series(系列)”選項(xiàng)卡,然后轉(zhuǎn)到“General(常規(guī))”頁面,其中下拉組合框“Horizontal Axis(水平軸)”和“Vertical Axis(垂直軸)”將允許用戶選擇新的自定義軸,具體取決于用戶之前是將其定義為垂直軸還是水平軸。
代碼:
[C#.Net]
private void Form1_Load(object sender, System.EventArgs e) Line line1 = new Line(); Line line2 = new Line(); tChart1.Aspect.View3D = false; tChart1.Panel.Gradient.Visible = true; tChart1.Header.Text = "TeeChart Multiple Axes"; tChart1.Series.Add(line1); tChart1.Series.Add(line2); for(int t = 0; t <= 10; ++t) line1.Add(Convert.ToDouble(t), Convert.ToDouble(10 + t), Color.Red); if(t > 1) line2.Add(Convert.ToDouble(t), Convert.ToDouble(t), Color.Green); Axis leftAxis = tChart1.Axes.Left; leftAxis.StartPosition = 0; leftAxis.EndPosition = 50; leftAxis.AxisPen.Color = Color.Red; leftAxis.Title.Font.Color = Color.Red; leftAxis.Title.Font.Bold = true; leftAxis.Title.Text = "1st Left Axis"; Axis axis1 = new Axis(false, false, tChart1.Chart); tChart1.Axes.Custom.Add(axis1); line2.CustomVertAxis = axis1; axis1.StartPosition = 50; axis1.EndPosition = 100; axis1.AxisPen.Color = Color.Green; axis1.Title.Font.Color = Color.Green; axis1.Title.Font.Bold = true; axis1.Title.Text = "Extra Axis"; axis1.PositionUnits= PositionUnits.Percent; axis1.RelativePosition = 20;