日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TeeChart基础使用手册

發(fā)布時(shí)間:2023/12/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TeeChart基础使用手册 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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ù)繪制效率表
繪制數(shù)據(jù)量TeeChart.dllTeeChart8.ocxTeeChart.WPF.dll
>16000(帶端點(diǎn))
<16000(帶端點(diǎn))
任意數(shù)量(不帶端點(diǎn))
  • TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll流暢繪制的數(shù)據(jù)量范圍
繪制方式TeeChart.dllTeeChart8.ocxTeeChart.WPF.dll
帶端點(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ù)。
private void SetChart() {/*******************圖表窗體設(shè)置********************************/chartMove.Aspect.View3D = false; //關(guān)閉控件3D效果 默認(rèn)為true//chartMove.Aspect.Chart3DPercent = 100; //3D效果度大小chartMove.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.Walls.Back.Gradient.MiddleColor = Color.FromArgb(0, 100,200); //背景漸變色chartMove.Axes.Left.Grid.Visible = true; //是否顯示橫行網(wǎng)格/*******************紅色直線創(chuàng)建并設(shè)置***************************/Steema.TeeChart.Styles.Line l_lineRed = new Steema.TeeChart.Styles.Line(); //創(chuàng)建直線對(duì)象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(marksTip)l_marks.HideDelay = 1500;/*******************添加數(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(400, 900)); //添加數(shù)據(jù)點(diǎn)chartMove.Series[1].Add(i, l_ran.Next(100, 500)); //添加數(shù)據(jù)點(diǎn)}*///第二種添加方式,添加數(shù)組Random l_ran = new Random(); //隨機(jī)數(shù)種子int[] l_arrX = new int[10000];int[] l_arrRedY = new int[10000];int[] l_arrGreenY = new int[10000];for (int i = 0; i < 10000; i++){l_arrX[i] = i;l_arrRedY[i] = l_ran.Next(400, 900);l_arrGreenY[i] = l_ran.Next(100, 500);}Console.WriteLine("添加前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數(shù)據(jù)添加前系統(tǒng)時(shí)間chartMove.Series[0].Add(l_arrX, l_arrRedY); //添加數(shù)組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 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文件,寫入下列代碼。
    Random l_ran = new Random(); //隨機(jī)數(shù)種子 int[] l_arrX = new int[10000]; int[] l_arrY = new int[10000]; int[] l_arrZ = new int[10000]; for (int i = 0; i < 10000; i++) {l_arrX[i] = i;l_arrY[i] = l_ran.Next(400, 900);l_arrZ[i] = l_ran.Next(100, 500); } points3D1.Add(l_arrX, l_arrY, l_arrZ); //添加數(shù)組

    返回頂部

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文件,寫入下列代碼。

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); } axTChartMove.Series(0).AddArray(10000, l_arrRedY, l_arrX); //添加數(shù)組數(shù)據(jù) axTChartMove.SeriesList.Items[1].AddArray(10000, l_arrBlueY, l_arrX); //效果和上面相同 <p align="right"><a href="#top">返回頂部</a></p>

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 毫秒

  • 測(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:546

      935 毫秒

    • 顯示前:49:30:041
      顯示后:49:30:995

      954 毫秒

    • 顯示前:49:30:996
      顯示后:49:31:974

      978 毫秒

    • 顯示前: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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。