TeeChart基础使用手册
TeeChart使用手冊(cè)
pdf版下載地址
TeeChart庫下載
文章目錄
- TeeChart使用手冊(cè)
- 1、TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll優(yōu)缺點(diǎn)
- 1.1 TeeChart.dll
- 1.2 TeeChart8.ocx
- 1.3 TeeChart.WPF.dll
- 2、Windows窗體應(yīng)用(.NET Framework) + TeeChart.dll
- 2.1 創(chuàng)建工程
- 2.2 添加TeeChart.dll
- 2.3. 基本參數(shù)設(shè)置
- 2.3.1 代碼設(shè)置
- 2.3.2 代碼實(shí)現(xiàn)效果
- 2.3.3 圖像界面設(shè)置
- 2.3.4 界面設(shè)置實(shí)現(xiàn)效果
- 3、Windows窗體應(yīng)用(.NET Framework) + TeeChart8.ocx
- 3.1 創(chuàng)建工程
- 3.2 添加TeeChart8.ocx
- 3.3. 基本參數(shù)設(shè)置
- 3.3.1 代碼設(shè)置
- 3.3.2 代碼實(shí)現(xiàn)效果
- 3.3.3 圖像界面設(shè)置
- 3.3.4 界面設(shè)置實(shí)現(xiàn)效果
- 4、WPF應(yīng)用(.NET Framework) + TeeChart.WPF.dll
- 4.1 創(chuàng)建工程
- 4.2 添加TeeChart.WPF.dll
- 4.3. 基本參數(shù)設(shè)置
- 4.3.1 代碼設(shè)置
- 4.3.2 代碼實(shí)現(xiàn)效果
- 5、動(dòng)態(tài)繪制圖表
- 5.1 TeeChart.dll實(shí)現(xiàn)
- 5.1.1 不同條件實(shí)現(xiàn)效果
- 5.1.2 TeeChart.dll繪圖效率測(cè)試結(jié)果
- 5.2 TeeChart8.ocx實(shí)現(xiàn)
- 5.2.1 不同條件實(shí)現(xiàn)效果
- 5.2.2 TeeChart8.ocx繪圖效率測(cè)試結(jié)果
- 5.3 TeeChart.WPF.dll實(shí)現(xiàn)
- 5.3.1 不同條件實(shí)現(xiàn)效果
- 5.3.2 TeeChart.WPF.dll繪圖效率測(cè)試結(jié)果
- 6、Add-數(shù)據(jù)添加函數(shù)解析
返回頂部
1、TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll優(yōu)缺點(diǎn)
- TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll數(shù)據(jù)繪制效率表
| >16000(帶端點(diǎn)) | 高 | 中 | 低 |
| <16000(帶端點(diǎn)) | 中 | 高 | 低 |
| 任意數(shù)量(不帶端點(diǎn)) | 中 | 高 | 低 |
- TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll流暢繪制的數(shù)據(jù)量范圍
| 帶端點(diǎn) | <2000 | <2500 | <1500 |
| 不帶端點(diǎn) | <6000 | <8000 | <2500 |
返回頂部
1.1 TeeChart.dll
-
缺點(diǎn):
-
TeeChart.dll在顯示效果上較差,如圖所示,添加控件后默認(rèn)情況下在縮放是鼠標(biāo)的選框會(huì)出現(xiàn)偏移、虛影、重疊、閃爍的情況,圖中紅圈為鼠標(biāo)位置。
-
解決方法(1):進(jìn)入TeeChart Editor界面 –> Chart –>General –>Zoom –>Pen 然后修改任意一項(xiàng)參數(shù),就不會(huì)出現(xiàn)選框偏移、閃爍等問題,而虛影、選框重疊的問題還是存在,第一次修改后會(huì)在Form.Designer.cs文件中生成相應(yīng)的代碼,第二次以后修改不會(huì)生成,這導(dǎo)致第二次以后修改的參數(shù)不會(huì)生效,只有刪除第一次生成的代碼再設(shè)置才能生成。
-
解決方法(2):在程序中添加任意一條設(shè)置Zoom參數(shù)的代碼就不會(huì)出現(xiàn)選框偏移等問題,如:
tChart1.Zoom.Pen.Style = System.Drawing.Drawing2D.DashStyle.Dash;
-
-
TeeChart.dll的TeeChart Editor界面存在字體模糊,缺失,被遮擋的情況。
-
-
優(yōu)點(diǎn):
-
在TeeChart.dll的TeeChart Editor界面中設(shè)置的參數(shù)會(huì)在Form.Designer.cs文件中自動(dòng)生成相應(yīng)的代碼,步驟清晰,利于通過代碼繪制圖標(biāo),可用于學(xué)習(xí)每個(gè)參數(shù)、功能的代碼實(shí)現(xiàn)方式。
-
TeeChart.dll在使用時(shí)支持.NET Framework 4及4以上的框架。
-
具有較多重載函數(shù),結(jié)構(gòu)清晰,使用簡(jiǎn)單方便。
-
TeeChart.dll添加大量數(shù)據(jù)的效率高于TeeChart8.ocx,和TeeChart.WPF.dll差不多。
-
TeeChart.dll在繪制超過16000個(gè)帶端點(diǎn)的數(shù)據(jù)時(shí)效率最高。
-
返回頂部
1.2 TeeChart8.ocx
-
缺點(diǎn):
-
在TeeChart8.ocx的Editing界面上設(shè)置的參數(shù)、內(nèi)容并不會(huì)在Form.Designer.cs文件中生成相應(yīng)的代碼,而是將控件的設(shè)置信息編碼后寫入Form.resx文件中,不利于使用代碼實(shí)現(xiàn)TeeChart8.ocx的圖表功能,如下圖。
-
TeeChart8.ocx大部分類、函數(shù)、參數(shù)、實(shí)現(xiàn)方式與TeeChart.dll、TeeChart.WPF.dll差異較大,所以在從TeeChart.dll、TeeChart.WPF.dll轉(zhuǎn)到TeeChart8.ocx后使用代碼實(shí)現(xiàn)時(shí)不是很方便。
-
TeeChart8.ocx在使用時(shí)支持**.NET Framework 4.5及4.5以上的框架,當(dāng)使用框架低于4.5時(shí),在運(yùn)行程序時(shí)會(huì)出現(xiàn)異常。**
-
-
優(yōu)點(diǎn):
- TeeChart8.ocx的Editing界面在顯示效果上要優(yōu)于TeeChart.dll,功能邏輯更清晰,較少出現(xiàn)字體模糊、被遮擋的情況,使用圖像界面實(shí)現(xiàn)圖表效率高于TeeChart.dll。
-
在圖表種類上TeeChart8.ocx 有121種,TeeChart.dll有104種。
-
TeeChart8.ocx添加大量數(shù)據(jù)的速度較慢,略低于TeeChart.dll和TeeChart.WPF.dll。
-
TeeChart8.ocx 在繪制小于16000個(gè)帶端點(diǎn)的數(shù)據(jù)時(shí)效率最高,繪制任意數(shù)量不帶端點(diǎn)的數(shù)據(jù)效率最高。
返回頂部
1.3 TeeChart.WPF.dll
-
缺點(diǎn):
-
TeeChart.WPF.dll沒有圖形設(shè)置窗口,不能通過圖形界面進(jìn)行設(shè)置,開發(fā)效率較低。
-
部分的功能、參數(shù)也被棄用,在使用上不易上手,代碼實(shí)現(xiàn)效率較低。
-
大概率出現(xiàn)某一組數(shù)據(jù)繪制失敗的情況,且與數(shù)據(jù)量無關(guān)。
-
TeeChart.WPF.dll 繪制任意數(shù)量的數(shù)據(jù)效率都比較低,能流暢繪制的數(shù)據(jù)量小。
-
-
優(yōu)點(diǎn):
- TeeChart.WPF.dll的部分類、函數(shù)、參數(shù)與TeeChart.dll相同,在熟悉TeeChart.dll代碼實(shí)現(xiàn)的情況下使用TeeChart.WPF.dll會(huì)更容易。
- TeeChart.WPF.dll在使用時(shí)支持**.NET Framework 4及4以上**的框架。
- TeeChart.WPF.dll添加大量數(shù)據(jù)的效率高于TeeChart8.ocx,和TeeChart.dll差不多。
返回頂部
2、Windows窗體應(yīng)用(.NET Framework) + TeeChart.dll
2.1 創(chuàng)建工程
- 打開Visual studio,將選項(xiàng)欄設(shè)置為C# — windows — 桌面,如下圖:
- 選擇Windows窗體應(yīng)用(.NET Framework),然后點(diǎn)擊下一步,設(shè)置好項(xiàng)目名稱和位置,點(diǎn)擊創(chuàng)建,創(chuàng)建成功后如下圖。
返回頂部
2.2 添加TeeChart.dll
-
選擇窗口左上角(根據(jù)每個(gè)人Visual studio設(shè)置不同而位置不同)的工具箱。
-
在工具欄中任意處點(diǎn)擊鼠標(biāo)右鍵,選擇添加選項(xiàng)卡。
- 設(shè)置好選項(xiàng)卡名字后,在新建的選項(xiàng)卡上點(diǎn)擊鼠標(biāo)右鍵,點(diǎn)擊選擇項(xiàng)。
- 進(jìn)入選擇工具項(xiàng)后,選擇**.NET Framework組件**,點(diǎn)擊瀏覽,然后然后找到存放TeeChart.dll的路徑,再點(diǎn)擊確定。
- 這樣新建的選項(xiàng)卡中就添加進(jìn)了Teechart。
返回頂部
2.3. 基本參數(shù)設(shè)置
2.3.1 代碼設(shè)置
- 從工具欄找到剛添加的TChart,使用鼠標(biāo)左鍵拖入設(shè)計(jì)窗口。
- 鼠標(biāo)左鍵選中添加的TChart,按R鍵進(jìn)入屬性欄,找到布局 –> Dock,設(shè)置為fill。
- 進(jìn)入Form.cs文件,創(chuàng)建一個(gè)函數(shù)DrawImage(),根據(jù)需要使用下表中的程序語句設(shè)置Chart的常用基本參數(shù)。
-
數(shù)據(jù)添加方式效率對(duì)比
-
單位: 分:秒:毫秒
-
數(shù)據(jù)量: 10000 * 2個(gè)數(shù)據(jù)點(diǎn)
-
public int Add(double x, double y); //添加點(diǎn)
-
添加前:48:35:896
添加后:48:35:901消耗:5 毫秒
-
添加前:49:53:762
添加后:49:53:768消耗:6 毫秒
-
添加前:53:31:880
添加后:53:31:885消耗:5 毫秒
-
-
public void Add(Array xValues, Array yValues); //添加數(shù)組
-
添加前:35:39:089
添加后:35:39:092消耗:3 毫秒
-
添加前:33:58:818
添加后:33:58:820差:2 毫秒
-
添加前:11:30:878
添加后:11:30:881消耗:3 毫秒
-
-
-
綜合得出
- 點(diǎn)添加方式:消耗時(shí)間在5-6毫秒左右;
- 數(shù)組添加方式:消耗時(shí)間在2-3毫秒左右。
- **結(jié)論:數(shù)組添加方式效率比點(diǎn)添加方式快一倍。**詳情請(qǐng)看:Add函數(shù)解析
返回頂部
2.3.2 代碼實(shí)現(xiàn)效果
返回頂部
2.3.3 圖像界面設(shè)置
-
從工具欄找到剛添加的TChart,使用鼠標(biāo)左鍵拖入設(shè)計(jì)窗口。
-
鼠標(biāo)左鍵選中添加的TChart,按R鍵進(jìn)入屬性欄,找到布局 –> Dock,設(shè)置為fill。
-
鼠標(biāo)右鍵點(diǎn)擊添加的TChart,選擇屬性。
- 會(huì)進(jìn)入TeeChart Editor界面,該界面主要能設(shè)置Chart、Series、Data、Print、Export、Tools、Animations、Themes八項(xiàng)。
-
基本設(shè)置步驟
- 選擇表的種類、樣式:Chart –> Series –> Add.
- 選擇這里取消勾選左下角 view 3D,選擇3D分類 –> point 3D(不是必須,可選擇其它類),點(diǎn)擊OK.
- Chart會(huì)變成所選的圖表樣式,左下角出現(xiàn)一個(gè)points3D1。
- 設(shè)置圖形窗口是否為3D、3D的效果程度:Chart –> 3D
- 勾選3,開啟3D效果,這里可勾選也可不勾選。
- 3D% :在勾選3后設(shè)置3D效果度大小。
- 設(shè)置邊框和背景:Chart –> Walls
- Visible Walls :是否顯示邊框
- Left\Right\Back\Bottom:設(shè)置單面邊框
- 設(shè)置point3D端點(diǎn)的顏色:Series –> Format
- 設(shè)置線條的樣式:Series –> Format
- 設(shè)置端點(diǎn)的樣式:Series –> Points
- 設(shè)置橫坐標(biāo)、縱坐標(biāo)刻度顯示數(shù)據(jù)類型、Legend的顯示類型。
- 設(shè)置標(biāo)記提示:Tools –> “+”號(hào)。
- 選擇Mark Tips –> Add.
- 設(shè)置標(biāo)記提示
- style :設(shè)置顯示信息,這里改為X and Y values.
- move:鼠標(biāo)移動(dòng)到目標(biāo)點(diǎn)上就顯示。
- Click:鼠標(biāo)點(diǎn)擊目標(biāo)點(diǎn)然后顯示。
- Delay:設(shè)置響應(yīng)時(shí)間。
- Hide Delay:設(shè)置顯示時(shí)間。
- 窗口左下角出現(xiàn)marksTip1。
- 可通過選中窗口左下角的圖標(biāo),點(diǎn)擊圖標(biāo)右上角的三角圖標(biāo) –> Edit 來設(shè)置相應(yīng)屬性參數(shù)。
- 添加數(shù)據(jù):進(jìn)入Form.cs文件,寫入下列代碼。
返回頂部
2.3.4 界面設(shè)置實(shí)現(xiàn)效果
返回頂部
3、Windows窗體應(yīng)用(.NET Framework) + TeeChart8.ocx
3.1 創(chuàng)建工程
-
打開Visual studio,將選項(xiàng)欄設(shè)置為C# — windows — 桌面。
-
選擇Windows窗體應(yīng)用(.NET Framework),然后點(diǎn)擊下一步,設(shè)置好項(xiàng)目名稱和位置,點(diǎn)擊創(chuàng)建。
-
需要注意的時(shí)這里的框架不能低于**.NET Framework 4.5**,否則使用TeeChart8.ocx時(shí)會(huì)報(bào)錯(cuò)。
-
返回頂部
3.2 添加TeeChart8.ocx
-
選擇窗口左上角(根據(jù)每個(gè)人Visual studio設(shè)置不同而位置不同)的工具箱。
-
在工具欄中任意處點(diǎn)擊鼠標(biāo)右鍵,選擇添加選項(xiàng)卡。
-
設(shè)置好選項(xiàng)卡名字后,在新建的選項(xiàng)卡上點(diǎn)擊鼠標(biāo)右鍵,點(diǎn)擊選擇項(xiàng)。
-
進(jìn)入選擇工具項(xiàng)后,選擇COM組件,找到并勾選TeeeChart Pro Activex control v8,再點(diǎn)擊確定。
-
這樣新建的選項(xiàng)卡中就添加進(jìn)了Teechart。
返回頂部
3.3. 基本參數(shù)設(shè)置
3.3.1 代碼設(shè)置
-
從工具欄找到剛添加的TeeChart Pro Activex control v8,使用鼠標(biāo)左鍵拖入設(shè)計(jì)窗口。
-
鼠標(biāo)左鍵選中添加的TChart,按R鍵進(jìn)入屬性欄,找到布局 –> Dock,設(shè)置為fill。
-
進(jìn)入Form.cs文件,創(chuàng)建兩個(gè)函數(shù)DrawImage()、ColorToUint(Color color),根據(jù)需要使用下表中的程序語句設(shè)置AxTChart的常用基本參數(shù)。
/// <summary> /// 將Color的RGB值轉(zhuǎn)換為uint值 /// </summary> /// <param name="color"></param> /// <returns></returns> private uint ColorToUint(Color color) {return (uint)(((uint)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R)); } /// <summary> /// 靜態(tài)圖表繪制 /// </summary> private void SetChart() {/*******************圖表窗體設(shè)置********************************///axTChartMove.Header.Text.Clear(); //清空標(biāo)題//axTChartMove.Header.Text.Add("TeeChar8.ocx"); //添加窗口標(biāo)題,先清空原有標(biāo)題axTChartMove.Header.Text.Text = "TeeChar8.ocx"; //設(shè)置tchart窗口標(biāo)題axTChartMove.Axis.Left.Title.Caption = "Y軸"; //設(shè)置X軸Y軸標(biāo)題axTChartMove.Axis.Bottom.Title.Caption = "X軸";axTChartMove.Axis.Left.Title.Angle = 0; //設(shè)置標(biāo)題的旋轉(zhuǎn)角度axTChartMove.Aspect.View3D = false; //是否顯示3D效果/*axTChartMove.Axis.Bottom.SetMinMax(0, 200); //設(shè)置刻度顯示范圍axTChartMove.Axis.Left.SetMinMax(0, 1000);*/axTChartMove.Axis.Left.Increment = 10; //設(shè)置Y軸最小刻度axTChartMove.Legend.CheckBoxes = true; //是否需要勾選/*******************紅色直線創(chuàng)建并設(shè)置***************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創(chuàng)建并添加直線對(duì)象axTChartMove.Series(0).Title = "直線red"; //設(shè)置線條名axTChartMove.Series(0).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設(shè)置端點(diǎn)的樣式形狀axTChartMove.Series(0).asLine.Pointer.HorizontalSize = 4; //設(shè)置端點(diǎn)寬axTChartMove.Series(0).asLine.Pointer.VerticalSize = 4; //設(shè)置端點(diǎn)高axTChartMove.Series(0).asLine.Pointer.Visible = true; //是否顯示端點(diǎn)axTChartMove.Series(0).Color = ColorToUint(Color.FromArgb(255, 0, 0)); //設(shè)置直線顏色/*******************藍(lán)色直線創(chuàng)建并設(shè)置*****************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創(chuàng)建并添加直線對(duì)象axTChartMove.Series(1).Title = "直線blue"; //設(shè)置線條名axTChartMove.Series(1).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設(shè)置端點(diǎn)的樣式形狀axTChartMove.Series(1).asLine.Pointer.HorizontalSize = 4; //設(shè)置端點(diǎn)寬axTChartMove.Series(1).asLine.Pointer.VerticalSize = 4; //設(shè)置端點(diǎn)高axTChartMove.Series(1).asLine.Pointer.Visible = true; //是否顯示端點(diǎn)axTChartMove.Series(1).Color = ColorToUint(Color.FromArgb(0, 0, 255));/*******************添加鼠標(biāo)監(jiān)聽,標(biāo)記提示*************************/axTChartMove.Tools.Add(TeeChart.EToolClass.tcMarksTip); //標(biāo)記提示axTChartMove.Tools.Items[0].asMarksTip.Style = TeeChart.EMarkStyle.smsXY; //設(shè)置提示信息顯示樣式/*******************設(shè)置鼠標(biāo)縮放**********************************/Color l_cZoom = Color.FromArgb(0, 0, 0);axTChartMove.Zoom.Pen.Color = ColorToUint(l_cZoom); //設(shè)置鼠標(biāo)縮放選框顏色axTChartMove.Zoom.Pen.Style = TeeChart.EChartPenStyle.psDashDot; //選框線條樣式設(shè)置/*******************添加數(shù)據(jù)顯示數(shù)據(jù)*****************************///第一種添加方式,單個(gè)點(diǎn)添加/* Random l_ran = new Random(); //隨機(jī)數(shù)種子for (int i = 0; i < 10000; i++){axTChartMove.Series(0).AddXY(i, l_ran.Next(500, 900), "", axTChartMove.Series(0).Color); //添加數(shù)據(jù)點(diǎn)axTChartMove.Series(1).AddXY(i, l_ran.Next(100, 600), "", axTChartMove.Series(1).Color);}*///第二種添加方式,添加數(shù)組Random l_ran = new Random(); //隨機(jī)數(shù)種子int[] l_arrX = new int[10000];int[] l_arrRedY = new int[10000];int[] l_arrBlueY = new int[10000];for (int i = 0; i < 10000; i++){l_arrX[i] = i;l_arrRedY[i] = l_ran.Next(400, 900);l_arrBlueY[i] = l_ran.Next(100, 500);}Console.WriteLine("添加前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數(shù)據(jù)添加前系統(tǒng)時(shí)間axTChartMove.Series(0).AddArray(10000, l_arrRedY, l_arrX); //添加數(shù)組數(shù)據(jù)axTChartMove.SeriesList.Items[1].AddArray(10000, l_arrBlueY, l_arrX); //效果和上面相同Console.WriteLine("添加后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數(shù)據(jù)添加后系統(tǒng)時(shí)間
-
數(shù)據(jù)添加方式效率對(duì)比
-
單位: 分:秒:毫秒
-
數(shù)據(jù)量: 10000 * 2個(gè)數(shù)據(jù)點(diǎn)
-
int AddXY(double AX, double AY, string ALabel, uint Value); //添加點(diǎn)
-
添加前:54:47:115
添加后:54:47:826消耗:711 毫秒
-
添加前:55:35:540
添加后:55:35:884消耗:344 毫秒
-
添加前:03:40:087
添加后:03:40:516消耗:429 毫秒
-
-
void AddArray(int ArraySize, object YArray, object XArray); //添加數(shù)組
-
添加前:14:55:456
添加后:14:55:460消耗:4 毫秒
-
添加前:15:51:258
添加后:15:51:262消耗:4 毫秒
-
添加前:16:20:728
添加后:16:20:732消耗:4 毫秒
-
-
-
綜合得出
- 點(diǎn)添加方式:消耗時(shí)間在344-711毫秒左右;
- 數(shù)組添加方式:消耗時(shí)間在4毫秒左右。
- 結(jié)論:數(shù)組添加方式效率比點(diǎn)添加方式快了百倍。
返回頂部
3.3.2 代碼實(shí)現(xiàn)效果
返回頂部
3.3.3 圖像界面設(shè)置
-
從工具欄找到剛添加的axTChart1,使用鼠標(biāo)左鍵拖入設(shè)計(jì)窗口。
-
鼠標(biāo)左鍵選中添加的axTChart1,按R鍵進(jìn)入屬性欄,找到布局 –> Dock,設(shè)置為fill。
-
鼠標(biāo)右鍵點(diǎn)擊添加的axTChart1,選擇屬性。
-
會(huì)進(jìn)入到如圖所示窗口,點(diǎn)擊**Edit Chart…**開始編輯圖表。
-
進(jìn)入編輯欄后如圖所示,窗口左側(cè)時(shí)選項(xiàng)卡主要有Series、Chart、Data、Tools、Export、Print、Themes幾部分組成,窗口中部及右側(cè)是點(diǎn)擊選項(xiàng)卡后相應(yīng)的設(shè)置區(qū)域。
-
基本設(shè)置步驟。
-
選擇表的種類、樣式: Series –> Add.
-
選擇這里取消勾選左下角 view 3D,選擇3D分類 –> point 3D,點(diǎn)擊OK。
-
axTChart1會(huì)變成所選的圖表樣式。
-
設(shè)置圖表標(biāo)題: Chart –> General –> Fonts –> Font
- 窗口中部選項(xiàng)欄選擇 Title ,可再 Font設(shè)置圖表標(biāo)題的字體大小、字體類型、字體顏色等。
-
設(shè)置坐標(biāo)軸刻度:Axis –> Scales
-
Minimum –> Change :設(shè)置坐標(biāo)軸刻度最小取值范圍。
-
Maximum –> Change:設(shè)置坐標(biāo)軸刻度最大取值范圍。
-
Increment –> Change:設(shè)置坐標(biāo)軸刻度增量。
-
Axis –> Labels–> Text–> Font 可設(shè)置坐標(biāo)軸刻度的字體類型、字體大小、字體顏色等。
-
-
設(shè)置坐標(biāo)軸標(biāo)題:Axis –> Title –> style
- Style –> Title 里輸入標(biāo)題內(nèi)容。
- 可選擇標(biāo)題的位置:Left Axis、Right Axis等。
- Angle 設(shè)置標(biāo)題的旋轉(zhuǎn)角度。
- Size設(shè)置標(biāo)題區(qū)域大小。
- Visible設(shè)置是否顯示標(biāo)題。
-
Axis –> Title –> Format –> Text –> Font 可設(shè)置坐標(biāo)軸標(biāo)題的字體類型、字體大小、字體顏色等。
-
設(shè)置線條:Series0 –> Format
- color:設(shè)置端點(diǎn)顏色。
- Color Each :使用任意顏色。
- Line … :設(shè)置線條顏色、樣式、大小等。
-
設(shè)置端點(diǎn):Series0 –> Point
- 設(shè)置端點(diǎn)樣式、大小等。
-
設(shè)置縮放功能:Chart –> Zoom
- Allow : 是否使用縮放功能
- Pen… :設(shè)置縮放選框的顏色、樣式、線條粗細(xì)等。
- Minimum Pixels:設(shè)置選框選擇的最小像素大小。
- Mouse Button:設(shè)置縮放功能是使用鼠標(biāo)哪一個(gè)鍵。
-
設(shè)置標(biāo)記提示
-
添加工具:Tools –> Add
-
選擇Mark Tips,點(diǎn)擊Add .
-
style :設(shè)置顯示信息,這里改為X and Y values.
-
move:鼠標(biāo)移動(dòng)到目標(biāo)點(diǎn)上就顯示。
-
Click:鼠標(biāo)點(diǎn)擊目標(biāo)點(diǎn)然后顯示。
-
Delay:設(shè)置響應(yīng)時(shí)間。
-
Hide Delay:設(shè)置顯示時(shí)間。
-
添加數(shù)據(jù):進(jìn)入Form.cs文件,寫入下列代碼。
-
3.3.4 界面設(shè)置實(shí)現(xiàn)效果
返回頂部
4、WPF應(yīng)用(.NET Framework) + TeeChart.WPF.dll
4.1 創(chuàng)建工程
- 打開Visual studio,將選項(xiàng)欄設(shè)置為C# — windows — 桌面。
- 選擇WPF應(yīng)用(.NET Framework),然后點(diǎn)擊下一步,設(shè)置好項(xiàng)目名稱和位置,點(diǎn)擊創(chuàng)建。
返回頂部
4.2 添加TeeChart.WPF.dll
-
選擇窗口左上角(根據(jù)每個(gè)人Visual studio設(shè)置不同而位置不同)的工具箱。
-
在工具欄中任意處點(diǎn)擊鼠標(biāo)右鍵,選擇添加選項(xiàng)卡。
-
設(shè)置好選項(xiàng)卡名字后,在新建的選項(xiàng)卡上點(diǎn)擊鼠標(biāo)右鍵,點(diǎn)擊選擇項(xiàng)。
-
進(jìn)入選擇工具項(xiàng)后,選擇WPF組件,點(diǎn)擊瀏覽,然后然后找到存放TeeChart.dll的路徑,再點(diǎn)擊確定。
-
這樣新建的選項(xiàng)卡中就添加進(jìn)了Teechart。
返回頂部
4.3. 基本參數(shù)設(shè)置
4.3.1 代碼設(shè)置
-
從工具欄找到剛添加的TChart,使用鼠標(biāo)左鍵拖入設(shè)計(jì)窗口。
-
鼠標(biāo)右鍵點(diǎn)擊添加的TChart,選擇布局 –> 全部填充。
-
選中剛添加的TChart控件,在窗口右邊的屬性欄設(shè)置控件名稱。
-
進(jìn)入MainWindow.xaml.cs文件,創(chuàng)建一個(gè)函數(shù)DrawImage(),根據(jù)需要使用下表中的程序語句設(shè)置Chart的常用基本參數(shù)。
private void SetChart() {/*******************圖表窗體設(shè)置********************************/chartMove.Aspect.View3D = false; //控件3D效果chartMove.Header.Text = "WPF使用TeeChart.WPF"; //設(shè)置窗體標(biāo)題chartMove.Legend.Visible = true; //圖例chartMove.Legend.Color = Color.FromRgb(100, 200, 200); //設(shè)置圖例背景顏色chartMove.Axes.Visible = true; //是否顯示坐標(biāo)軸chartMove.Axes.Left.Title.Text = "Y軸"; //Y軸標(biāo)題chartMove.Axes.Bottom.Title.Text = "X軸"; //X軸標(biāo)題chartMove.Axes.Left.Title.Visible = true; //坐標(biāo)軸標(biāo)題是否可見chartMove.Axes.Left.Title.Angle = 0; //坐標(biāo)軸標(biāo)題旋轉(zhuǎn)角度chartMove.Axes.Left.Labels.Style = Steema.TeeChart.WPF.AxisLabelStyle.Auto;//Y軸樣式chartMove.Axes.Left.Labels.Angle = 20; //坐標(biāo)軸刻度標(biāo)簽旋轉(zhuǎn)角度chartMove.Axes.Bottom.Grid.Visible = true; //是否顯示網(wǎng)格/*******************藍(lán)色直線創(chuàng)建并設(shè)置*****************************/Steema.TeeChart.WPF.Styles.Line l_lineBlue = new Steema.TeeChart.WPF.Styles.Line(); //創(chuàng)建linel_lineBlue.Color = Color.FromRgb(0, 0, 200); //設(shè)置線顏色l_lineBlue.Title = "直線blue";l_lineBlue.Pointer.Visible = true; //設(shè)置開啟端點(diǎn)chartMove.Series.Add(l_lineBlue); //line添加進(jìn)TChart/*******************綠色直線創(chuàng)建并設(shè)置***************************/Steema.TeeChart.WPF.Styles.Line l_lineGreen = new Steema.TeeChart.WPF.Styles.Line(); //創(chuàng)建linel_lineGreen.Color = Color.FromRgb(0, 200, 0); //設(shè)置線顏色l_lineGreen.Title = "直線green";l_lineGreen.Pointer.Visible = true;chartMove.Series.Add(l_lineGreen);/*******************添加鼠標(biāo)監(jiān)聽,標(biāo)記提示*************************/Steema.TeeChart.WPF.Tools.MarksTip l_marks = new Steema.TeeChart.WPF.Tools.MarksTip();l_marks.Style = Steema.TeeChart.WPF.Styles.MarksStyles.XY; //設(shè)置提示信息樣式l_marks.MouseAction = Steema.TeeChart.WPF.Tools.MarksTipMouseAction.Click; //設(shè)置觸發(fā)響應(yīng)方式chartMove.Tools.Add(l_marks);/*******************添加數(shù)據(jù)顯示數(shù)據(jù)*****************************///第一種添加方式,單個(gè)點(diǎn)添加/*Random l_ran = new Random(); //隨機(jī)數(shù)種子for (int i = 0; i < 10000; i++){chartMove.Series[0].Add(i, l_ran.Next(600, 1000)); //添加數(shù)據(jù)點(diǎn) chartMove.Series[1].Add(i, l_ran.Next(200, 700)); //添加數(shù)據(jù)點(diǎn) }*///第二種添加方式,添加數(shù)組Random l_ran = new Random(); //隨機(jī)數(shù)種子int[] l_arrX = new int[10000];int[] l_arrBlueY = new int[10000];int[] l_arrGreenY = new int[10000];for (int i = 0; i < 10000; i++){l_arrX[i] = i;l_arrBlueY[i] = l_ran.Next(100, 500);l_arrGreenY[i] = l_ran.Next(400, 900);}Console.WriteLine("添加前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數(shù)據(jù)添加前系統(tǒng)時(shí)間chartMove.Series[0].Add(l_arrX, l_arrBlueY); //添加數(shù)組數(shù)據(jù)chartMove.Series[1].Add(l_arrX, l_arrGreenY);Console.WriteLine("添加后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數(shù)據(jù)添加后系統(tǒng)時(shí)間 }
-
數(shù)據(jù)添加方式效率對(duì)比
-
單位: 分:秒:毫秒
-
數(shù)據(jù)量: 10000 * 2個(gè)數(shù)據(jù)點(diǎn)
-
public virtual int Add(double x, double y); //添加點(diǎn)
-
添加前:42:25:431
添加后:42:25:438消耗:7 毫秒
-
添加前:43:29:754
添加后:43:29:760消耗:6 毫秒
-
添加前:44:03:966
添加后:44:03:972消耗:6 毫秒
-
-
public void Add(Array xValues, Array yValues); //添加數(shù)組
-
添加前:55:20:610
添加后:55:20:613消耗:3 毫秒
-
添加前:55:32:508
添加后:55:32:511消耗:3 毫秒
-
添加前:55:47:579
添加后:55:47:581消耗:2 毫秒
-
-
-
綜合得出
- 點(diǎn)添加方式:消耗時(shí)間在6-7毫秒左右;
- 數(shù)組添加方式:消耗時(shí)間在2-3毫秒左右。
- 結(jié)論:數(shù)組添加方式效率比點(diǎn)添加方式快一倍。
返回頂部
4.3.2 代碼實(shí)現(xiàn)效果
返回頂部
5、動(dòng)態(tài)繪制圖表
5.1 TeeChart.dll實(shí)現(xiàn)
/// <summary> /// 圖表參數(shù)設(shè)置 /// </summary> private void SetChart() {/*******************圖表窗體設(shè)置********************************/chartMove.Aspect.View3D = false; //關(guān)閉控件3D效果 默認(rèn)為truechartMove.Legend.CheckBoxes = true; //是否需要勾選,如果只有一種數(shù)據(jù),且設(shè)置為false時(shí),顯示每個(gè)點(diǎn)的縱坐標(biāo)chartMove.Legend.Visible = true; //直線標(biāo)題集合(圖例)是否顯示chartMove.Legend.Alignment = Steema.TeeChart.LegendAlignments.Bottom; //直線標(biāo)題顯示位置chartMove.Header.Text = "teeChart.dll動(dòng)態(tài)繪圖"; //Tchart窗體標(biāo)題chartMove.Axes.Visible = true; //是否顯示坐標(biāo)chartMove.Axes.Left.Title.Text = "Y軸"; //左側(cè)標(biāo)題chartMove.Axes.Bottom.Title.Text = "X軸"; //底部標(biāo)題chartMove.Axes.Left.Title.Visible = true; //坐標(biāo)標(biāo)題是否可見chartMove.Axes.Left.Title.Angle = 0; //設(shè)置坐標(biāo)擺放角度,縱坐標(biāo)默認(rèn)為90chartMove.Axes.Left.Labels.Style = Steema.TeeChart.AxisLabelStyle.Auto; //Y軸樣式chartMove.Axes.Left.Labels.Angle = 0; //yx軸的Label顯示樣式(旋轉(zhuǎn)角度)chartMove.Walls.Visible = true; //是否顯示圖表邊框chartMove.Walls.Back.Transparent = false; //背景是否透明chartMove.Walls.Back.Gradient.Visible = true; //是否顯示背景chartMove.Axes.Left.Grid.Visible = true; //是否顯示橫行網(wǎng)格/*******************紅色直線創(chuàng)建并設(shè)置***************************/Steema.TeeChart.Styles.Line l_lineRed = new Steema.TeeChart.Styles.Line(); //直線l_lineRed.Title = "直線red"; //標(biāo)題l_lineRed.Color = Color.FromArgb(250, 50, 0); //直線顏色//line1.ColorEach = true; //直線使用所有顏色l_lineRed.ShowInLegend = true; //是否顯示直線標(biāo)題 true/false 默認(rèn)為truel_lineRed.Pointer.Visible = true; //顯示端點(diǎn)l_lineRed.Pointer.Style = Steema.TeeChart.Styles.PointerStyles.Sphere; //設(shè)置端點(diǎn)樣式chartMove.Series.Add(l_lineRed); //添加直線/*******************綠色直線創(chuàng)建并設(shè)置*****************************/Steema.TeeChart.Styles.Line l_lineGreen = new Steema.TeeChart.Styles.Line();l_lineGreen.Title = "直線green";l_lineGreen.Color = Color.FromArgb(0, 255, 0);l_lineGreen.ShowInLegend = true;l_lineGreen.Pointer.Visible = true;l_lineGreen.Pointer.Style = Steema.TeeChart.Styles.PointerStyles.Rectangle;chartMove.Series.Add(l_lineGreen);/*******************添加鼠標(biāo)監(jiān)聽,標(biāo)記提示*************************/Steema.TeeChart.Tools.MarksTip l_marks = new Steema.TeeChart.Tools.MarksTip(); //創(chuàng)建標(biāo)記提示對(duì)象l_marks.Style = Steema.TeeChart.Styles.MarksStyles.XY; //顯示信息設(shè)為X YchartMove.Tools.Add(l_marks);l_marks.MouseDelay = 200; //設(shè)置延時(shí)時(shí)間,注意必須在Add(l_marks)后,否則會(huì)報(bào)錯(cuò)l_marks.HideDelay = 1500;}/// <summary> /// 子線程執(zhí)行的方法 /// </summary> protected void ThreadRun() {while (true){if (!m_thSwitch){Thread l_thThis = Thread.CurrentThread; //如果m_thSwitch為false,則銷毀當(dāng)前線程l_thThis.Abort();}else{int[] l_arrX = new int[10000];int[] l_arrY_red = new int[10000];int[] l_arrY_green = new int[10000];Random l_ran = new Random(); //隨機(jī)數(shù)種子for (int i = 0; i < 10000; i++){l_arrX[i] = i;l_arrY_red[i] = l_ran.Next(200, 300);l_arrY_green[i] = l_ran.Next(300, 400);}Console.WriteLine("顯示前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數(shù)據(jù)添加顯示前系統(tǒng)時(shí)間chartMove.Invoke(new Action(delegate () //通過委托在UI線程繪制圖像{chartMove.Series[0].Add(l_arrX, l_arrY_red);chartMove.Series[1].Add(l_arrX, l_arrY_green);}));Console.WriteLine("顯示后:" + DateTime.Now.ToString("mm:ss:fff")); //打印數(shù)據(jù)添加顯示后系統(tǒng)時(shí)間}} }private bool m_thSwitch = false; //用于判斷線程是開啟還是關(guān)閉/// <summary> /// 開始Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStart_Click(object sender, EventArgs e) {if (!m_thSwitch){ThreadStart l_start = new ThreadStart(ThreadRun);Thread l_thAddData = new Thread(l_start); //創(chuàng)建子線程繪制圖表數(shù)據(jù)m_thSwitch = true;l_thAddData.Start(); //線程開始} } /// <summary> /// 停止Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStop_Click(object sender, EventArgs e) {m_thSwitch = false; //關(guān)閉線程 }返回頂部
5.1.1 不同條件實(shí)現(xiàn)效果
-
以下數(shù)據(jù)皆為測(cè)試數(shù)據(jù)中隨機(jī)抽取。
-
測(cè)試條件1: 同時(shí)顯示兩路數(shù)據(jù)、每路10000個(gè)數(shù)據(jù)點(diǎn),共20000個(gè)數(shù)據(jù)點(diǎn)(帶端點(diǎn))。
-
顯示前:55:19:646
顯示后:55:20:055消耗:409 毫秒
-
顯示前:55:20:056
顯示后:55:20:457消耗:401毫秒
-
顯示前:55:20:458
顯示后:55:20:865消耗:407 毫秒
-
-
測(cè)試條件2: 同時(shí)顯示兩路數(shù)據(jù)、每路10000個(gè)數(shù)據(jù)點(diǎn),共20000個(gè)數(shù)據(jù)點(diǎn)(不帶端點(diǎn))
- 顯示前:00:10:464
顯示后:00:10:586
消耗:122 毫秒
-
顯示前:00:10:586
顯示后:00:10:711消耗:125 毫秒
-
顯示前:00:10:711
顯示后:00:10:832消耗:121 毫秒
- 顯示前:00:10:464
-
測(cè)試條件3: 同時(shí)顯示兩路數(shù)據(jù)、每路5000個(gè)數(shù)據(jù)點(diǎn),共10000個(gè)數(shù)據(jù)點(diǎn)(帶端點(diǎn))。
-
顯示前:04:39:917
顯示后:04:40:123消耗:206 毫秒
-
顯示前:04:40:123
顯示后:04:40:338消耗:215 毫秒
-
顯示前:04:40:338
顯示后:04:40:545消耗:207 毫秒
-
-
測(cè)試條件4: 同時(shí)顯示兩路數(shù)據(jù)、每路5000個(gè)數(shù)據(jù)點(diǎn),共10000個(gè)數(shù)據(jù)點(diǎn)(不帶端點(diǎn))。
-
顯示前:09:20:054
顯示后:09:20:118消耗:64 毫秒
-
顯示前:09:20:118
顯示后:09:20:179消耗:61毫秒
-
顯示前:09:20:179
顯示后:09:20:240消耗:61毫秒
-
-
測(cè)試條件5: 同時(shí)顯示兩路數(shù)據(jù)、每路1000個(gè)數(shù)據(jù)點(diǎn),共2000個(gè)數(shù)據(jù)點(diǎn)(帶端點(diǎn))。
-
顯示前:13:02:957
顯示后:13:03:005消耗:48 毫秒
-
顯示前:13:03:005
顯示后:13:03:055消耗:50 毫秒
-
顯示前:13:03:055
顯示后:13:03:100消耗:45 毫秒
-
-
測(cè)試條件6: 同時(shí)顯示兩路數(shù)據(jù)、每路1000個(gè)數(shù)據(jù)點(diǎn),共2000個(gè)數(shù)據(jù)點(diǎn)(帶端點(diǎn))。
-
顯示前:16:16:539
顯示后:16:16:556消耗:17
-
顯示前:16:16:556
顯示后:16:16:574消耗:18
-
顯示前:16:16:574
顯示后:16:16:599消耗:25
-
返回頂部
5.1.2 TeeChart.dll繪圖效率測(cè)試結(jié)果
- 根據(jù)上方幾組測(cè)試數(shù)據(jù)得出以下幾點(diǎn)結(jié)論:
- 相同數(shù)據(jù)量下,不帶端點(diǎn)比帶端點(diǎn)繪制效率高3倍左右。
- TeeChart.dll繪圖效率與數(shù)據(jù)量呈線性關(guān)系。
- 根據(jù)20幀左右為肉眼感覺的流暢度,帶端點(diǎn)繪制一次大概最多繪制總量2000個(gè)數(shù)據(jù),不帶端點(diǎn)一次大概最多繪制總量6000個(gè)數(shù)據(jù)。
返回頂部
5.2 TeeChart8.ocx實(shí)現(xiàn)
/// <summary> /// 將Color的RGB值轉(zhuǎn)換為uint值 /// </summary> /// <param name="color"></param> /// <returns></returns> private uint ColorToUint(Color color) {return (uint)(((uint)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R)); }/// <summary> /// AxTChart基本參數(shù)設(shè)置 /// </summary> private void SetChart() {/*******************圖表窗體設(shè)置********************************/axTChartMove.Header.Text.Text = "TeeChar8.ocx"; //設(shè)置tchart窗口標(biāo)題axTChartMove.Axis.Left.Title.Caption = "Y軸"; //設(shè)置X軸Y軸標(biāo)題axTChartMove.Axis.Bottom.Title.Caption = "X軸";axTChartMove.Axis.Left.Title.Angle = 0; //設(shè)置標(biāo)題的旋轉(zhuǎn)角度axTChartMove.Aspect.View3D = false; //是否顯示3D效果axTChartMove.Axis.Left.Increment = 10; //設(shè)置Y軸最小刻度axTChartMove.Legend.CheckBoxes = true; //是否需要勾選/*******************紅色直線創(chuàng)建并設(shè)置***************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創(chuàng)建并添加直線對(duì)象axTChartMove.Series(0).Title = "直線red"; //設(shè)置線條名axTChartMove.Series(0).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設(shè)置端點(diǎn)的樣式形狀axTChartMove.Series(0).asLine.Pointer.HorizontalSize = 4; //設(shè)置端點(diǎn)寬axTChartMove.Series(0).asLine.Pointer.VerticalSize = 4; //設(shè)置端點(diǎn)高axTChartMove.Series(0).asLine.Pointer.Visible = true; //是否顯示端點(diǎn)axTChartMove.Series(0).Color = ColorToUint(Color.FromArgb(255, 0, 0)); //設(shè)置直線顏色/*******************藍(lán)色直線創(chuàng)建并設(shè)置*****************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創(chuàng)建并添加直線對(duì)象axTChartMove.Series(1).Title = "直線blue"; //設(shè)置線條名axTChartMove.Series(1).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設(shè)置端點(diǎn)的樣式形狀axTChartMove.Series(1).asLine.Pointer.HorizontalSize = 4; //設(shè)置端點(diǎn)寬axTChartMove.Series(1).asLine.Pointer.VerticalSize = 4; //設(shè)置端點(diǎn)高axTChartMove.Series(1).asLine.Pointer.Visible = true; //是否顯示端點(diǎn)axTChartMove.Series(1).Color = ColorToUint(Color.FromArgb(0, 0, 255));/*******************添加鼠標(biāo)監(jiān)聽,標(biāo)記提示*************************/axTChartMove.Tools.Add(TeeChart.EToolClass.tcMarksTip); //標(biāo)記提示axTChartMove.Tools.Items[0].asMarksTip.Style = TeeChart.EMarkStyle.smsXY; //設(shè)置提示信息顯示樣式/*******************設(shè)置鼠標(biāo)縮放**********************************/Color l_cZoom = Color.FromArgb(0, 0, 0);axTChartMove.Zoom.Pen.Color = ColorToUint(l_cZoom); //設(shè)置鼠標(biāo)縮放選框顏色axTChartMove.Zoom.Pen.Style = TeeChart.EChartPenStyle.psDashDot; //選框線條樣式設(shè)置 }/// <summary> /// 子線程執(zhí)行的方法 /// </summary> private void ThreadRun() {while (true){if (!m_thSwitch){Thread l_thThis = Thread.CurrentThread; //如果m_thSwitch為false,則銷毀當(dāng)前線程l_thThis.Abort();}else{Random l_ran = new Random(); //隨機(jī)數(shù)種子int[] l_arrX = new int[10000];int[] l_arrRedY = new int[10000];int[] l_arrBlueY = new int[10000];for (int i = 0; i < 10000; i++) //組合數(shù)據(jù)到數(shù)組中{l_arrX[i] = i;l_arrRedY[i] = l_ran.Next(400, 900);l_arrBlueY[i] = l_ran.Next(100, 500);}Console.WriteLine("顯示前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數(shù)據(jù)添加顯示前系統(tǒng)時(shí)間axTChartMove.Invoke(new Action(delegate () //通過委托在UI線程繪制圖像{axTChartMove.Series(0).AddArray(10000, l_arrRedY, l_arrX); //添加數(shù)組數(shù)據(jù)axTChartMove.SeriesList.Items[1].AddArray(10000, l_arrBlueY, l_arrX); //效果和上面相同}));Console.WriteLine("顯示后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數(shù)據(jù)添加顯示后系統(tǒng)時(shí)間}} }private bool m_thSwitch = false; //用于判斷線程是開啟還是關(guān)閉 /// <summary> /// 開始Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStart_Click(object sender, EventArgs e) {if (!m_thSwitch){ThreadStart l_start = new ThreadStart(ThreadRun);Thread l_thAddData = new Thread(l_start); //創(chuàng)建子線程繪制圖表數(shù)據(jù)m_thSwitch = true;l_thAddData.Start(); //線程開始} } /// <summary> /// 停止Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStop_Click(object sender, EventArgs e) {m_thSwitch = false; //關(guān)閉線程 }返回頂部
5.2.1 不同條件實(shí)現(xiàn)效果
-
測(cè)試條件1: 同時(shí)顯示兩路數(shù)據(jù)、每路10000個(gè)數(shù)據(jù)點(diǎn),共20000個(gè)數(shù)據(jù)點(diǎn)(帶端點(diǎn))。
-
顯示前:54:24:196
顯示后:54:24:891消耗:695 毫秒
-
顯示前:54:24:891
顯示后:54:25:510消耗:619 毫秒
-
顯示前:54:25:941
顯示后:54:26:513消耗:572 毫秒
-
-
**測(cè)試條件2:**同時(shí)顯示兩路數(shù)據(jù)、每路10000個(gè)數(shù)據(jù)點(diǎn),共20000個(gè)數(shù)據(jù)點(diǎn)(不帶端點(diǎn))。
-
顯示前:57:24:433
顯示后:57:24:535消耗:102 毫秒
-
顯示前:57:24:536
顯示后:57:24:633消耗:97 毫秒
-
顯示前:57:24:633
顯示后:57:24:732消耗:99 毫秒
-
-
**測(cè)試條件3:**同時(shí)顯示兩路數(shù)據(jù)、每路5000個(gè)數(shù)據(jù)點(diǎn),共10000個(gè)數(shù)據(jù)點(diǎn)(帶端點(diǎn))。
-
顯示前:01:10:577
顯示后:01:10:781消耗:204 毫秒
-
顯示前:01:10:833
顯示后:01:11:080消耗:247 毫秒
-
顯示前:01:11:080
顯示后:01:11:334消耗:254 毫秒
-
-
**測(cè)試條件4:**同時(shí)顯示兩路數(shù)據(jù)、每路5000個(gè)數(shù)據(jù)點(diǎn),共10000個(gè)數(shù)據(jù)點(diǎn)(不帶端點(diǎn))。
-
顯示前:04:53:350
顯示后:04:53:421消耗:71 毫秒
-
顯示前:04:53:489
顯示后:04:53:558消耗:69 毫秒
-
顯示前:04:53:558
顯示后:04:53:626消耗:68 毫秒
-
-
**測(cè)試條件5:**同時(shí)顯示兩路數(shù)據(jù)、每路1000個(gè)數(shù)據(jù)點(diǎn),共2000個(gè)數(shù)據(jù)點(diǎn)( 帶端點(diǎn))。
-
顯示前:08:18:860
顯示后:08:18:900消耗:40 毫秒
-
顯示前:08:18:900
顯示后:08:18:941消耗:41 毫秒
-
顯示前:08:18:941
顯示后:08:18:981消耗:40 毫秒
-
-
**測(cè)試條件6:**同時(shí)顯示兩路數(shù)據(jù)、每路1000個(gè)數(shù)據(jù)點(diǎn),共2000個(gè)數(shù)據(jù)點(diǎn)( 不帶端點(diǎn))。
-
顯示前:12:26:130
顯示后:12:26:142消耗:12 毫秒
-
顯示前:12:26:142
顯示后:12:26:155消耗:13 毫秒
-
顯示前:12:26:155
顯示后:12:26:167消耗:12 毫秒
-
返回頂部
5.2.2 TeeChart8.ocx繪圖效率測(cè)試結(jié)果
- 根據(jù)幾組測(cè)試數(shù)據(jù)得出以下幾點(diǎn)結(jié)論:
- 相同數(shù)據(jù)量下,不帶端點(diǎn)比帶端點(diǎn)繪制效率高6倍左右。
- TeeChart8.ocx繪圖效率與數(shù)據(jù)量增長呈反比關(guān)系。
- 根據(jù)20幀左右為肉眼感覺的流暢度,帶端點(diǎn)繪制一次大概最多繪制總量2500個(gè)數(shù)據(jù),不帶端點(diǎn)一次大概最多繪制總量8000個(gè)數(shù)據(jù)。
返回頂部
5.3 TeeChart.WPF.dll實(shí)現(xiàn)
private void SetChart() {/*******************圖表窗體設(shè)置********************************/chartMove.Aspect.View3D = false; //控件3D效果chartMove.Header.Text = "WPF使用TeeChart.WPF"; //設(shè)置窗體標(biāo)題chartMove.Legend.Visible = true; //圖例chartMove.Legend.Color = Color.FromRgb(100, 200, 200); //設(shè)置圖例背景顏色chartMove.Axes.Visible = true; //是否顯示坐標(biāo)軸chartMove.Axes.Left.Title.Text = "Y軸"; //Y軸標(biāo)題chartMove.Axes.Bottom.Title.Text = "X軸"; //X軸標(biāo)題chartMove.Axes.Left.Title.Visible = true; //坐標(biāo)軸標(biāo)題是否可見chartMove.Axes.Left.Title.Angle = 0; //坐標(biāo)軸標(biāo)題旋轉(zhuǎn)角度chartMove.Axes.Left.Labels.Style = Steema.TeeChart.WPF.AxisLabelStyle.Auto;//Y軸樣式chartMove.Axes.Left.Labels.Angle = 20; //坐標(biāo)軸刻度標(biāo)簽旋轉(zhuǎn)角度chartMove.Axes.Bottom.Grid.Visible = true; //是否顯示網(wǎng)格/*******************藍(lán)色直線創(chuàng)建并設(shè)置*****************************/Steema.TeeChart.WPF.Styles.Line l_lineBlue = new Steema.TeeChart.WPF.Styles.Line(); //創(chuàng)建linel_lineBlue.Color = Color.FromRgb(0, 0, 200); //設(shè)置線顏色l_lineBlue.Title = "直線blue";l_lineBlue.Pointer.Visible = false; //設(shè)置開啟端點(diǎn)chartMove.Series.Add(l_lineBlue); //line添加進(jìn)TChart/*******************綠色直線創(chuàng)建并設(shè)置***************************/Steema.TeeChart.WPF.Styles.Line l_lineGreen = new Steema.TeeChart.WPF.Styles.Line(); //創(chuàng)建linel_lineGreen.Color = Color.FromRgb(0, 200, 0); //設(shè)置線顏色l_lineGreen.Title = "直線green";l_lineGreen.Pointer.Visible = false;chartMove.Series.Add(l_lineGreen);/*******************添加鼠標(biāo)監(jiān)聽,標(biāo)記提示*************************/Steema.TeeChart.WPF.Tools.MarksTip l_marks = new Steema.TeeChart.WPF.Tools.MarksTip();l_marks.Style = Steema.TeeChart.WPF.Styles.MarksStyles.XY; //設(shè)置提示信息樣式l_marks.MouseAction = Steema.TeeChart.WPF.Tools.MarksTipMouseAction.Click; //設(shè)置觸發(fā)響應(yīng)方式chartMove.Tools.Add(l_marks); }/// <summary> /// 子線程執(zhí)行的方法 /// </summary> private void ThreadRun() {while (true){if (!m_thSwitch){Thread l_thThis = Thread.CurrentThread; //如果m_thSwitch為false,則銷毀當(dāng)前線程l_thThis.Abort();}else{//第二種添加方式,添加數(shù)組Random l_ran = new Random(); //隨機(jī)數(shù)種子int[] l_arrX = new int[1250];int[] l_arrBlueY = new int[1250];int[] l_arrGreenY = new int[1250];for (int i = 0; i < 1250; i++){l_arrX[i] = i;l_arrBlueY[i] = l_ran.Next(100, 500);l_arrGreenY[i] = l_ran.Next(400, 900);}Console.WriteLine("顯示前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數(shù)據(jù)添加顯示前系統(tǒng)時(shí)間chartMove.Dispatcher.Invoke(new Action(delegate () //通過委托在UI線程繪制圖像{chartMove.Series[0].Add(l_arrX, l_arrBlueY); //添加數(shù)組數(shù)據(jù)chartMove.Series[1].Add(l_arrX, l_arrGreenY);}));Console.WriteLine("顯示后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數(shù)據(jù)添加顯示后系統(tǒng)時(shí)間 }} }private bool m_thSwitch = false; //用于判斷線程是開啟還是關(guān)閉/// <summary> /// 開始Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStart_Click(object sender, EventArgs e) {if (!m_thSwitch){ThreadStart l_start = new ThreadStart(ThreadRun);Thread l_thAddData = new Thread(l_start); //創(chuàng)建子線程繪制圖表數(shù)據(jù)m_thSwitch = true;l_thAddData.Start(); //線程開始} } /// <summary> /// 停止Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStop_Click(object sender, EventArgs e) {m_thSwitch = false; //關(guān)閉線程 }返回頂部
5.3.1 不同條件實(shí)現(xiàn)效果
-
測(cè)試條件1: 同時(shí)顯示兩路數(shù)據(jù)、每路10000個(gè)數(shù)據(jù)點(diǎn),共20000個(gè)數(shù)據(jù)點(diǎn)(帶端點(diǎn))。
-
顯示前:47:34:611
顯示后:47:35:546935 毫秒
-
顯示前:49:30:041
顯示后:49:30:995954 毫秒
-
顯示前:49:30:996
顯示后:49:31:974978 毫秒
-
顯示前:57:28:732 (繪制失敗)
顯示后:57:28:733消耗:1 毫秒
-
-
測(cè)試條件2: 同時(shí)顯示兩路數(shù)據(jù)、每路10000個(gè)數(shù)據(jù)點(diǎn),共20000個(gè)數(shù)據(jù)點(diǎn)(不帶端點(diǎn))。
-
顯示前:32:29:988
顯示后:32:30:249消耗:261 毫秒
-
顯示前:32:30:536
顯示后:32:30:788消耗:252 毫秒
-
顯示前:32:30:789
顯示后:32:31:043消耗:254 毫秒
-
顯示后:32:31:043 (繪制失敗)
顯示前:32:31:043消耗:0 毫秒
-
-
測(cè)試條件3: 同時(shí)顯示兩路數(shù)據(jù)、每路5000個(gè)數(shù)據(jù)點(diǎn),共10000個(gè)數(shù)據(jù)點(diǎn)(帶端點(diǎn))。
-
顯示前:36:19:108
顯示后:36:19:501消耗:393 毫秒
-
顯示前:36:19:857
顯示后:36:20:250消耗:393 毫秒
-
顯示前:36:20:252
顯示后:36:20:650消耗:398 毫秒
-
顯示前:36:20:650 (繪制失敗)
顯示后:36:20:651消耗:1 毫秒
-
-
測(cè)試條件4: 同時(shí)顯示兩路數(shù)據(jù)、每路5000個(gè)數(shù)據(jù)點(diǎn),共10000個(gè)數(shù)據(jù)點(diǎn)(不帶端點(diǎn))。
-
顯示前:39:57:782
顯示后:39:57:940消耗:158 毫秒
-
顯示前:39:57:941
顯示后:39:58:103消耗:162 毫秒
-
顯示前:39:58:464
顯示后:39:58:629消耗:165 毫秒
-
顯示后:39:59:123 (繪制失敗)
顯示前:39:59:124消耗:1 毫秒
-
-
測(cè)試條件5: 同時(shí)顯示兩路數(shù)據(jù)、每路1000個(gè)數(shù)據(jù)點(diǎn),共2000個(gè)數(shù)據(jù)點(diǎn)(帶端點(diǎn))。
-
顯示前:44:01:284
顯示后:44:01:357消耗:73 毫秒
-
顯示前:44:01:475
顯示后:44:01:553消耗:78 毫秒
-
顯示前:44:01:650
顯示后:44:01:726消耗:76 毫秒
-
顯示前:44:01:812 (繪制失敗)
顯示后:44:01:813消耗:1 毫秒
-
-
測(cè)試條件6: 同時(shí)顯示兩路數(shù)據(jù)、每路1000個(gè)數(shù)據(jù)點(diǎn),共2000個(gè)數(shù)據(jù)點(diǎn)(不帶端點(diǎn))。
-
顯示前:47:53:530
顯示后:47:53:570消耗:40 毫秒
-
顯示前:47:53:570
顯示后:47:53:610消耗:40 毫秒
-
顯示前:47:53:611
顯示后:47:53:652消耗:41 毫秒
-
顯示前:47:53:734 (繪制失敗)
顯示后:47:53:734消耗:0 毫秒
-
返回頂部
5.3.2 TeeChart.WPF.dll繪圖效率測(cè)試結(jié)果
- 根據(jù)幾組測(cè)試數(shù)據(jù)得出以下幾點(diǎn)結(jié)論:
- 相同數(shù)據(jù)量下,不帶端點(diǎn)比帶端點(diǎn)繪制效率高2-3倍左右。
- TeeChart.WPF.dll帶端點(diǎn)繪圖效率與數(shù)據(jù)量增長反比關(guān)系,不帶端點(diǎn)繪圖效率與數(shù)據(jù)量增加呈正比關(guān)系。
- 根據(jù)20幀左右為肉眼感覺的流暢度,帶端點(diǎn)繪制一次大概最多繪制總量1500個(gè)數(shù)據(jù),不帶端點(diǎn)一次大概最多繪制總量2500個(gè)數(shù)據(jù)。
- 大概率出現(xiàn)某一組數(shù)據(jù)繪制失敗的情況,且與數(shù)據(jù)量無關(guān)。
返回頂部
6、Add-數(shù)據(jù)添加函數(shù)解析
-
概述: add函數(shù)無論是 public int Add(double x, double y) 還是 public void Add(Array xValues, Array yValues) 都是異步執(zhí)行函數(shù),并不參與圖表數(shù)據(jù)的繪制。
-
步驟:
-
使用ILSpy反編譯工具打開編譯后的可執(zhí)行文件,找到使用到添加數(shù)據(jù)的函數(shù)。
-
點(diǎn)擊Add,找到函數(shù)實(shí)現(xiàn)位置。
- 可以看出,前面if中都是在將數(shù)組數(shù)據(jù)添加給控件,最后調(diào)用Invalidate()函數(shù),此函數(shù)的主要功能是使控件的特定區(qū)域無效并向控件發(fā)送繪制消息。也就是說Invalidate函數(shù)只發(fā)出重繪界面的消息,不參與繪制控件,在消息發(fā)送完后就返回,Add函數(shù)就結(jié)束了。
-
從下列函數(shù)可看出,以點(diǎn)的方式添加數(shù)據(jù)每添加一個(gè)點(diǎn)就執(zhí)行一次**Invalidate()**函數(shù),所以添加效率會(huì)遠(yuǎn)低于數(shù)組添加方式。
-
總結(jié)
以上是生活随笔為你收集整理的TeeChart基础使用手册的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工智能AI编程基础(六)
- 下一篇: java菜鸟----职业的锐变之路