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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TeeChart基础使用手册

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

TeeChart使用手冊

pdf版下載地址
TeeChart庫下載

文章目錄

  • TeeChart使用手冊
    • 1、TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll優缺點
      • 1.1 TeeChart.dll
      • 1.2 TeeChart8.ocx
      • 1.3 TeeChart.WPF.dll
    • 2、Windows窗體應用(.NET Framework) + TeeChart.dll
      • 2.1 創建工程
      • 2.2 添加TeeChart.dll
      • 2.3. 基本參數設置
        • 2.3.1 代碼設置
        • 2.3.2 代碼實現效果
        • 2.3.3 圖像界面設置
        • 2.3.4 界面設置實現效果
    • 3、Windows窗體應用(.NET Framework) + TeeChart8.ocx
      • 3.1 創建工程
      • 3.2 添加TeeChart8.ocx
      • 3.3. 基本參數設置
        • 3.3.1 代碼設置
        • 3.3.2 代碼實現效果
        • 3.3.3 圖像界面設置
        • 3.3.4 界面設置實現效果
    • 4、WPF應用(.NET Framework) + TeeChart.WPF.dll
      • 4.1 創建工程
      • 4.2 添加TeeChart.WPF.dll
      • 4.3. 基本參數設置
        • 4.3.1 代碼設置
        • 4.3.2 代碼實現效果
    • 5、動態繪制圖表
      • 5.1 TeeChart.dll實現
        • 5.1.1 不同條件實現效果
        • 5.1.2 TeeChart.dll繪圖效率測試結果
      • 5.2 TeeChart8.ocx實現
        • 5.2.1 不同條件實現效果
        • 5.2.2 TeeChart8.ocx繪圖效率測試結果
      • 5.3 TeeChart.WPF.dll實現
        • 5.3.1 不同條件實現效果
        • 5.3.2 TeeChart.WPF.dll繪圖效率測試結果
    • 6、Add-數據添加函數解析

返回頂部

1、TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll優缺點

  • TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll數據繪制效率表
繪制數據量TeeChart.dllTeeChart8.ocxTeeChart.WPF.dll
>16000(帶端點)
<16000(帶端點)
任意數量(不帶端點)
  • TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll流暢繪制的數據量范圍
繪制方式TeeChart.dllTeeChart8.ocxTeeChart.WPF.dll
帶端點<2000<2500<1500
不帶端點<6000<8000<2500

返回頂部

1.1 TeeChart.dll

  • 缺點:

    • TeeChart.dll在顯示效果上較差,如圖所示,添加控件后默認情況下在縮放是鼠標的選框會出現偏移、虛影、重疊、閃爍的情況,圖中紅圈為鼠標位置。

      • 解決方法(1):進入TeeChart Editor界面 –> Chart –>General –>Zoom –>Pen 然后修改任意一項參數,就不會出現選框偏移、閃爍等問題,而虛影、選框重疊的問題還是存在,第一次修改后會在Form.Designer.cs文件中生成相應的代碼,第二次以后修改不會生成,這導致第二次以后修改的參數不會生效,只有刪除第一次生成的代碼再設置才能生成。

      • 解決方法(2):在程序中添加任意一條設置Zoom參數的代碼就不會出現選框偏移等問題,如:

        tChart1.Zoom.Pen.Style = System.Drawing.Drawing2D.DashStyle.Dash;

    • TeeChart.dll的TeeChart Editor界面存在字體模糊,缺失,被遮擋的情況。

  • 優點:

    • 在TeeChart.dll的TeeChart Editor界面中設置的參數會在Form.Designer.cs文件中自動生成相應的代碼,步驟清晰,利于通過代碼繪制圖標,可用于學習每個參數、功能的代碼實現方式。

    • TeeChart.dll在使用時支持.NET Framework 4及4以上的框架。

    • 具有較多重載函數,結構清晰,使用簡單方便。

    • TeeChart.dll添加大量數據的效率高于TeeChart8.ocx,和TeeChart.WPF.dll差不多。

    • TeeChart.dll在繪制超過16000個帶端點的數據時效率最高。

返回頂部

1.2 TeeChart8.ocx

  • 缺點:

    • 在TeeChart8.ocx的Editing界面上設置的參數、內容并不會在Form.Designer.cs文件中生成相應的代碼,而是將控件的設置信息編碼后寫入Form.resx文件中,不利于使用代碼實現TeeChart8.ocx的圖表功能,如下圖。

    • TeeChart8.ocx大部分類、函數、參數、實現方式與TeeChart.dll、TeeChart.WPF.dll差異較大,所以在從TeeChart.dll、TeeChart.WPF.dll轉到TeeChart8.ocx后使用代碼實現時不是很方便。

    • TeeChart8.ocx在使用時支持**.NET Framework 4.5及4.5以上的框架,當使用框架低于4.5時,在運行程序時會出現異常。**

  • 優點:

    • TeeChart8.ocx的Editing界面在顯示效果上要優于TeeChart.dll,功能邏輯更清晰,較少出現字體模糊、被遮擋的情況,使用圖像界面實現圖表效率高于TeeChart.dll。

    • 在圖表種類上TeeChart8.ocx 有121種,TeeChart.dll有104種。

    • TeeChart8.ocx添加大量數據的速度較慢,略低于TeeChart.dll和TeeChart.WPF.dll。

    • TeeChart8.ocx 在繪制小于16000個帶端點的數據時效率最高,繪制任意數量不帶端點的數據效率最高。

返回頂部

1.3 TeeChart.WPF.dll

  • 缺點:

    • TeeChart.WPF.dll沒有圖形設置窗口,不能通過圖形界面進行設置,開發效率較低。

    • 部分的功能、參數也被棄用,在使用上不易上手,代碼實現效率較低。

    • 大概率出現某一組數據繪制失敗的情況,且與數據量無關。

    • TeeChart.WPF.dll 繪制任意數量的數據效率都比較低,能流暢繪制的數據量小。

  • 優點:

    • TeeChart.WPF.dll的部分類、函數、參數與TeeChart.dll相同,在熟悉TeeChart.dll代碼實現的情況下使用TeeChart.WPF.dll會更容易。
    • TeeChart.WPF.dll在使用時支持**.NET Framework 4及4以上**的框架。
    • TeeChart.WPF.dll添加大量數據的效率高于TeeChart8.ocx,和TeeChart.dll差不多。

返回頂部

2、Windows窗體應用(.NET Framework) + TeeChart.dll

2.1 創建工程

  • 打開Visual studio,將選項欄設置為C# — windows — 桌面,如下圖:

  • 選擇Windows窗體應用(.NET Framework),然后點擊下一步,設置好項目名稱和位置,點擊創建,創建成功后如下圖。

返回頂部

2.2 添加TeeChart.dll

  • 選擇窗口左上角(根據每個人Visual studio設置不同而位置不同)的工具箱。

  • 在工具欄中任意處點擊鼠標右鍵,選擇添加選項卡

  • 設置好選項卡名字后,在新建的選項卡上點擊鼠標右鍵,點擊選擇項

  • 進入選擇工具項后,選擇**.NET Framework組件**,點擊瀏覽,然后然后找到存放TeeChart.dll的路徑,再點擊確定。

  • 這樣新建的選項卡中就添加進了Teechart。

返回頂部

2.3. 基本參數設置

2.3.1 代碼設置

  • 從工具欄找到剛添加的TChart,使用鼠標左鍵拖入設計窗口。

  • 鼠標左鍵選中添加的TChart,按R鍵進入屬性欄,找到布局 –> Dock,設置為fill

  • 進入Form.cs文件,創建一個函數DrawImage(),根據需要使用下表中的程序語句設置Chart的常用基本參數。
private void SetChart() {/*******************圖表窗體設置********************************/chartMove.Aspect.View3D = false; //關閉控件3D效果 默認為true//chartMove.Aspect.Chart3DPercent = 100; //3D效果度大小chartMove.Legend.CheckBoxes = true; //是否需要勾選,如果只有一種數據,且設置為false時,顯示每個點的縱坐標chartMove.Legend.Visible = true; //直線標題集合(圖例)是否顯示chartMove.Legend.Alignment = Steema.TeeChart.LegendAlignments.Bottom; //直線標題顯示位置chartMove.Header.Text = "teeChart.dll動態繪圖"; //Tchart窗體標題chartMove.Axes.Visible = true; //是否顯示坐標chartMove.Axes.Left.Title.Text = "Y軸"; //左側標題chartMove.Axes.Bottom.Title.Text = "X軸"; //底部標題chartMove.Axes.Left.Title.Visible = true; //坐標標題是否可見chartMove.Axes.Left.Title.Angle = 0; //設置坐標擺放角度,縱坐標默認為90chartMove.Axes.Left.Labels.Style = Steema.TeeChart.AxisLabelStyle.Auto; //Y軸樣式chartMove.Axes.Left.Labels.Angle = 0; //yx軸的Label顯示樣式(旋轉角度)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; //是否顯示橫行網格/*******************紅色直線創建并設置***************************/Steema.TeeChart.Styles.Line l_lineRed = new Steema.TeeChart.Styles.Line(); //創建直線對象l_lineRed.Title = "直線red"; //標題l_lineRed.Color = Color.FromArgb(250, 50, 0); //直線顏色//line1.ColorEach = true; //直線使用所有顏色l_lineRed.ShowInLegend = true; //是否顯示直線標題 true/false 默認為truel_lineRed.Pointer.Visible = true; //顯示端點l_lineRed.Pointer.Style = Steema.TeeChart.Styles.PointerStyles.Sphere; //設置端點樣式chartMove.Series.Add(l_lineRed); //添加直線/*******************綠色直線創建并設置******************************/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);/*******************添加鼠標監聽,標記提示*************************/Steema.TeeChart.Tools.MarksTip l_marks = new Steema.TeeChart.Tools.MarksTip(); //創建標記提示對象l_marks.Style = Steema.TeeChart.Styles.MarksStyles.XY; //顯示信息設為X YchartMove.Tools.Add(l_marks);l_marks.MouseDelay = 200; //設置延時時間,注意必須再Add(marksTip)l_marks.HideDelay = 1500;/*******************添加數據顯示數據*****************************///第一種添加方式,單個點添加/*Random l_ran = new Random(); //隨機數種子for (int i = 0; i < 10000; i++){chartMove.Series[0].Add(i, l_ran.Next(400, 900)); //添加數據點chartMove.Series[1].Add(i, l_ran.Next(100, 500)); //添加數據點}*///第二種添加方式,添加數組Random l_ran = new Random(); //隨機數種子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")); //打印數據添加前系統時間chartMove.Series[0].Add(l_arrX, l_arrRedY); //添加數組chartMove.Series[1].Add(l_arrX, l_arrGreenY);Console.WriteLine("添加后:" + DateTime.Now.ToString("mm:ss:fff")); //打印數據添加后系統時間 }

  • 數據添加方式效率對比

    • 單位: 分:秒:毫秒

    • 數據量: 10000 * 2個數據點

    • public int Add(double x, double y); //添加點

      • 添加前: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); //添加數組

      • 添加前:35:39:089
        添加后:35:39:092

        消耗:3 毫秒

      • 添加前:33:58:818
        添加后:33:58:820

        差:2 毫秒

      • 添加前:11:30:878
        添加后:11:30:881

        消耗:3 毫秒

  • 綜合得出

    • 點添加方式:消耗時間在5-6毫秒左右;
    • 數組添加方式:消耗時間在2-3毫秒左右。
    • **結論:數組添加方式效率比點添加方式快一倍。**詳情請看:Add函數解析

返回頂部

2.3.2 代碼實現效果

返回頂部

2.3.3 圖像界面設置

  • 從工具欄找到剛添加的TChart,使用鼠標左鍵拖入設計窗口。

  • 鼠標左鍵選中添加的TChart,按R鍵進入屬性欄,找到布局 –> Dock,設置為fill

  • 鼠標右鍵點擊添加的TChart,選擇屬性。

  • 會進入TeeChart Editor界面,該界面主要能設置Chart、Series、Data、Print、Export、Tools、Animations、Themes八項。

  • 基本設置步驟

    • 選擇表的種類、樣式:Chart –> Series –> Add.

    • 選擇這里取消勾選左下角 view 3D,選擇3D分類 –> point 3D(不是必須,可選擇其它類),點擊OK.

    • Chart會變成所選的圖表樣式,左下角出現一個points3D1

    • 設置圖形窗口是否為3D、3D的效果程度:Chart –> 3D
      • 勾選3,開啟3D效果,這里可勾選也可不勾選。
      • 3D% :在勾選3后設置3D效果度大小。

    • 設置邊框和背景:Chart –> Walls
    • Visible Walls :是否顯示邊框
    • Left\Right\Back\Bottom:設置單面邊框

    • 設置point3D端點的顏色:Series –> Format

    • 設置線條的樣式:Series –> Format

    • 設置端點的樣式:Series –> Points

    • 設置橫坐標、縱坐標刻度顯示數據類型、Legend的顯示類型。

    • 設置標記提示:Tools –> “+”號。

    • 選擇Mark Tips –> Add.

    • 設置標記提示
      • style :設置顯示信息,這里改為X and Y values.
      • move:鼠標移動到目標點上就顯示。
      • Click:鼠標點擊目標點然后顯示。
      • Delay:設置響應時間。
      • Hide Delay:設置顯示時間。

    • 窗口左下角出現marksTip1

    • 可通過選中窗口左下角的圖標,點擊圖標右上角的三角圖標 –> Edit 來設置相應屬性參數。

    • 添加數據:進入Form.cs文件,寫入下列代碼。
    Random l_ran = new Random(); //隨機數種子 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); //添加數組

    返回頂部

2.3.4 界面設置實現效果

返回頂部

3、Windows窗體應用(.NET Framework) + TeeChart8.ocx

3.1 創建工程

  • 打開Visual studio,將選項欄設置為C# — windows — 桌面。

  • 選擇Windows窗體應用(.NET Framework),然后點擊下一步,設置好項目名稱和位置,點擊創建

    • 需要注意的時這里的框架不能低于**.NET Framework 4.5**,否則使用TeeChart8.ocx時會報錯。

返回頂部

3.2 添加TeeChart8.ocx

  • 選擇窗口左上角(根據每個人Visual studio設置不同而位置不同)的工具箱。

  • 在工具欄中任意處點擊鼠標右鍵,選擇添加選項卡

  • 設置好選項卡名字后,在新建的選項卡上點擊鼠標右鍵,點擊選擇項

  • 進入選擇工具項后,選擇COM組件,找到并勾選TeeeChart Pro Activex control v8,再點擊確定。

  • 這樣新建的選項卡中就添加進了Teechart。

返回頂部

3.3. 基本參數設置

3.3.1 代碼設置

  • 從工具欄找到剛添加的TeeChart Pro Activex control v8,使用鼠標左鍵拖入設計窗口。

  • 鼠標左鍵選中添加的TChart,按R鍵進入屬性欄,找到布局 –> Dock,設置為fill

  • 進入Form.cs文件,創建兩個函數DrawImage()、ColorToUint(Color color),根據需要使用下表中的程序語句設置AxTChart的常用基本參數。

    /// <summary> /// 將Color的RGB值轉換為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> /// 靜態圖表繪制 /// </summary> private void SetChart() {/*******************圖表窗體設置********************************///axTChartMove.Header.Text.Clear(); //清空標題//axTChartMove.Header.Text.Add("TeeChar8.ocx"); //添加窗口標題,先清空原有標題axTChartMove.Header.Text.Text = "TeeChar8.ocx"; //設置tchart窗口標題axTChartMove.Axis.Left.Title.Caption = "Y軸"; //設置X軸Y軸標題axTChartMove.Axis.Bottom.Title.Caption = "X軸";axTChartMove.Axis.Left.Title.Angle = 0; //設置標題的旋轉角度axTChartMove.Aspect.View3D = false; //是否顯示3D效果/*axTChartMove.Axis.Bottom.SetMinMax(0, 200); //設置刻度顯示范圍axTChartMove.Axis.Left.SetMinMax(0, 1000);*/axTChartMove.Axis.Left.Increment = 10; //設置Y軸最小刻度axTChartMove.Legend.CheckBoxes = true; //是否需要勾選/*******************紅色直線創建并設置***************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創建并添加直線對象axTChartMove.Series(0).Title = "直線red"; //設置線條名axTChartMove.Series(0).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設置端點的樣式形狀axTChartMove.Series(0).asLine.Pointer.HorizontalSize = 4; //設置端點寬axTChartMove.Series(0).asLine.Pointer.VerticalSize = 4; //設置端點高axTChartMove.Series(0).asLine.Pointer.Visible = true; //是否顯示端點axTChartMove.Series(0).Color = ColorToUint(Color.FromArgb(255, 0, 0)); //設置直線顏色/*******************藍色直線創建并設置*****************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創建并添加直線對象axTChartMove.Series(1).Title = "直線blue"; //設置線條名axTChartMove.Series(1).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設置端點的樣式形狀axTChartMove.Series(1).asLine.Pointer.HorizontalSize = 4; //設置端點寬axTChartMove.Series(1).asLine.Pointer.VerticalSize = 4; //設置端點高axTChartMove.Series(1).asLine.Pointer.Visible = true; //是否顯示端點axTChartMove.Series(1).Color = ColorToUint(Color.FromArgb(0, 0, 255));/*******************添加鼠標監聽,標記提示*************************/axTChartMove.Tools.Add(TeeChart.EToolClass.tcMarksTip); //標記提示axTChartMove.Tools.Items[0].asMarksTip.Style = TeeChart.EMarkStyle.smsXY; //設置提示信息顯示樣式/*******************設置鼠標縮放**********************************/Color l_cZoom = Color.FromArgb(0, 0, 0);axTChartMove.Zoom.Pen.Color = ColorToUint(l_cZoom); //設置鼠標縮放選框顏色axTChartMove.Zoom.Pen.Style = TeeChart.EChartPenStyle.psDashDot; //選框線條樣式設置/*******************添加數據顯示數據*****************************///第一種添加方式,單個點添加/* Random l_ran = new Random(); //隨機數種子for (int i = 0; i < 10000; i++){axTChartMove.Series(0).AddXY(i, l_ran.Next(500, 900), "", axTChartMove.Series(0).Color); //添加數據點axTChartMove.Series(1).AddXY(i, l_ran.Next(100, 600), "", axTChartMove.Series(1).Color);}*///第二種添加方式,添加數組Random l_ran = new Random(); //隨機數種子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")); //打印數據添加前系統時間axTChartMove.Series(0).AddArray(10000, l_arrRedY, l_arrX); //添加數組數據axTChartMove.SeriesList.Items[1].AddArray(10000, l_arrBlueY, l_arrX); //效果和上面相同Console.WriteLine("添加后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數據添加后系統時間

  • 數據添加方式效率對比

    • 單位: 分:秒:毫秒

    • 數據量: 10000 * 2個數據點

    • int AddXY(double AX, double AY, string ALabel, uint Value); //添加點

      • 添加前: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); //添加數組

      • 添加前:14:55:456
        添加后:14:55:460

        消耗:4 毫秒

      • 添加前:15:51:258
        添加后:15:51:262

        消耗:4 毫秒

      • 添加前:16:20:728
        添加后:16:20:732

        消耗:4 毫秒

  • 綜合得出

    • 點添加方式:消耗時間在344-711毫秒左右;
    • 數組添加方式:消耗時間在4毫秒左右。
    • 結論:數組添加方式效率比點添加方式快了百倍。

返回頂部

3.3.2 代碼實現效果

返回頂部

3.3.3 圖像界面設置

  • 從工具欄找到剛添加的axTChart1,使用鼠標左鍵拖入設計窗口。

  • 鼠標左鍵選中添加的axTChart1,按R鍵進入屬性欄,找到布局 –> Dock,設置為fill

  • 鼠標右鍵點擊添加的axTChart1,選擇屬性。

  • 會進入到如圖所示窗口,點擊**Edit Chart…**開始編輯圖表。

  • 進入編輯欄后如圖所示,窗口左側時選項卡主要有Series、Chart、Data、Tools、Export、Print、Themes幾部分組成,窗口中部及右側是點擊選項卡后相應的設置區域。

  • 基本設置步驟。

    • 選擇表的種類、樣式: Series –> Add.

    • 選擇這里取消勾選左下角 view 3D,選擇3D分類 –> point 3D,點擊OK。

    • axTChart1會變成所選的圖表樣式。

    • 設置圖表標題: Chart –> General –> Fonts –> Font

      • 窗口中部選項欄選擇 Title ,可再 Font設置圖表標題的字體大小、字體類型、字體顏色等。

    • 設置坐標軸刻度:Axis –> Scales

      • Minimum –> Change :設置坐標軸刻度最小取值范圍。

      • Maximum –> Change:設置坐標軸刻度最大取值范圍。

      • Increment –> Change:設置坐標軸刻度增量。

      • Axis –> Labels–> Text–> Font 可設置坐標軸刻度的字體類型、字體大小、字體顏色等。

    • 設置坐標軸標題:Axis –> Title –> style

      • Style –> Title 里輸入標題內容。
      • 可選擇標題的位置:Left Axis、Right Axis等。
      • Angle 設置標題的旋轉角度。
      • Size設置標題區域大小。
      • Visible設置是否顯示標題。

      • Axis –> Title –> Format –> Text –> Font 可設置坐標軸標題的字體類型、字體大小、字體顏色等。

    • 設置線條:Series0 –> Format

      • color:設置端點顏色。
      • Color Each :使用任意顏色。
      • Line … :設置線條顏色、樣式、大小等。

    • 設置端點:Series0 –> Point

      • 設置端點樣式、大小等。

    • 設置縮放功能:Chart –> Zoom

      • Allow : 是否使用縮放功能
      • Pen… :設置縮放選框的顏色、樣式、線條粗細等。
      • Minimum Pixels:設置選框選擇的最小像素大小。
      • Mouse Button:設置縮放功能是使用鼠標哪一個鍵。

    • 設置標記提示

    • 添加工具:Tools –> Add

    • 選擇Mark Tips,點擊Add .

    • style :設置顯示信息,這里改為X and Y values.

    • move:鼠標移動到目標點上就顯示。

    • Click:鼠標點擊目標點然后顯示。

    • Delay:設置響應時間。

    • Hide Delay:設置顯示時間。

    • 添加數據:進入Form.cs文件,寫入下列代碼。

Random l_ran = new Random(); //隨機數種子 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); //添加數組數據 axTChartMove.SeriesList.Items[1].AddArray(10000, l_arrBlueY, l_arrX); //效果和上面相同 <p align="right"><a href="#top">返回頂部</a></p>

3.3.4 界面設置實現效果

返回頂部

4、WPF應用(.NET Framework) + TeeChart.WPF.dll

4.1 創建工程

  • 打開Visual studio,將選項欄設置為C# — windows — 桌面。
  • 選擇WPF應用(.NET Framework),然后點擊下一步,設置好項目名稱和位置,點擊創建

返回頂部

4.2 添加TeeChart.WPF.dll

  • 選擇窗口左上角(根據每個人Visual studio設置不同而位置不同)的工具箱。

  • 在工具欄中任意處點擊鼠標右鍵,選擇添加選項卡

  • 設置好選項卡名字后,在新建的選項卡上點擊鼠標右鍵,點擊選擇項

  • 進入選擇工具項后,選擇WPF組件,點擊瀏覽,然后然后找到存放TeeChart.dll的路徑,再點擊確定。

  • 這樣新建的選項卡中就添加進了Teechart。

返回頂部

4.3. 基本參數設置

4.3.1 代碼設置

  • 從工具欄找到剛添加的TChart,使用鼠標左鍵拖入設計窗口。

  • 鼠標右鍵點擊添加的TChart,選擇布局 –> 全部填充。

  • 選中剛添加的TChart控件,在窗口右邊的屬性欄設置控件名稱。

  • 進入MainWindow.xaml.cs文件,創建一個函數DrawImage(),根據需要使用下表中的程序語句設置Chart的常用基本參數。

    private void SetChart() {/*******************圖表窗體設置********************************/chartMove.Aspect.View3D = false; //控件3D效果chartMove.Header.Text = "WPF使用TeeChart.WPF"; //設置窗體標題chartMove.Legend.Visible = true; //圖例chartMove.Legend.Color = Color.FromRgb(100, 200, 200); //設置圖例背景顏色chartMove.Axes.Visible = true; //是否顯示坐標軸chartMove.Axes.Left.Title.Text = "Y軸"; //Y軸標題chartMove.Axes.Bottom.Title.Text = "X軸"; //X軸標題chartMove.Axes.Left.Title.Visible = true; //坐標軸標題是否可見chartMove.Axes.Left.Title.Angle = 0; //坐標軸標題旋轉角度chartMove.Axes.Left.Labels.Style = Steema.TeeChart.WPF.AxisLabelStyle.Auto;//Y軸樣式chartMove.Axes.Left.Labels.Angle = 20; //坐標軸刻度標簽旋轉角度chartMove.Axes.Bottom.Grid.Visible = true; //是否顯示網格/*******************藍色直線創建并設置*****************************/Steema.TeeChart.WPF.Styles.Line l_lineBlue = new Steema.TeeChart.WPF.Styles.Line(); //創建linel_lineBlue.Color = Color.FromRgb(0, 0, 200); //設置線顏色l_lineBlue.Title = "直線blue";l_lineBlue.Pointer.Visible = true; //設置開啟端點chartMove.Series.Add(l_lineBlue); //line添加進TChart/*******************綠色直線創建并設置***************************/Steema.TeeChart.WPF.Styles.Line l_lineGreen = new Steema.TeeChart.WPF.Styles.Line(); //創建linel_lineGreen.Color = Color.FromRgb(0, 200, 0); //設置線顏色l_lineGreen.Title = "直線green";l_lineGreen.Pointer.Visible = true;chartMove.Series.Add(l_lineGreen);/*******************添加鼠標監聽,標記提示*************************/Steema.TeeChart.WPF.Tools.MarksTip l_marks = new Steema.TeeChart.WPF.Tools.MarksTip();l_marks.Style = Steema.TeeChart.WPF.Styles.MarksStyles.XY; //設置提示信息樣式l_marks.MouseAction = Steema.TeeChart.WPF.Tools.MarksTipMouseAction.Click; //設置觸發響應方式chartMove.Tools.Add(l_marks);/*******************添加數據顯示數據*****************************///第一種添加方式,單個點添加/*Random l_ran = new Random(); //隨機數種子for (int i = 0; i < 10000; i++){chartMove.Series[0].Add(i, l_ran.Next(600, 1000)); //添加數據點 chartMove.Series[1].Add(i, l_ran.Next(200, 700)); //添加數據點 }*///第二種添加方式,添加數組Random l_ran = new Random(); //隨機數種子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")); //打印數據添加前系統時間chartMove.Series[0].Add(l_arrX, l_arrBlueY); //添加數組數據chartMove.Series[1].Add(l_arrX, l_arrGreenY);Console.WriteLine("添加后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數據添加后系統時間 }

  • 數據添加方式效率對比

    • 單位: 分:秒:毫秒

    • 數據量: 10000 * 2個數據點

    • public virtual int Add(double x, double y); //添加點

      • 添加前: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); //添加數組

      • 添加前:55:20:610
        添加后:55:20:613

        消耗:3 毫秒

      • 添加前:55:32:508
        添加后:55:32:511

        消耗:3 毫秒

      • 添加前:55:47:579
        添加后:55:47:581

        消耗:2 毫秒

  • 綜合得出

    • 點添加方式:消耗時間在6-7毫秒左右;
    • 數組添加方式:消耗時間在2-3毫秒左右。
    • 結論:數組添加方式效率比點添加方式快一倍。

返回頂部

4.3.2 代碼實現效果

返回頂部

5、動態繪制圖表

5.1 TeeChart.dll實現

/// <summary> /// 圖表參數設置 /// </summary> private void SetChart() {/*******************圖表窗體設置********************************/chartMove.Aspect.View3D = false; //關閉控件3D效果 默認為truechartMove.Legend.CheckBoxes = true; //是否需要勾選,如果只有一種數據,且設置為false時,顯示每個點的縱坐標chartMove.Legend.Visible = true; //直線標題集合(圖例)是否顯示chartMove.Legend.Alignment = Steema.TeeChart.LegendAlignments.Bottom; //直線標題顯示位置chartMove.Header.Text = "teeChart.dll動態繪圖"; //Tchart窗體標題chartMove.Axes.Visible = true; //是否顯示坐標chartMove.Axes.Left.Title.Text = "Y軸"; //左側標題chartMove.Axes.Bottom.Title.Text = "X軸"; //底部標題chartMove.Axes.Left.Title.Visible = true; //坐標標題是否可見chartMove.Axes.Left.Title.Angle = 0; //設置坐標擺放角度,縱坐標默認為90chartMove.Axes.Left.Labels.Style = Steema.TeeChart.AxisLabelStyle.Auto; //Y軸樣式chartMove.Axes.Left.Labels.Angle = 0; //yx軸的Label顯示樣式(旋轉角度)chartMove.Walls.Visible = true; //是否顯示圖表邊框chartMove.Walls.Back.Transparent = false; //背景是否透明chartMove.Walls.Back.Gradient.Visible = true; //是否顯示背景chartMove.Axes.Left.Grid.Visible = true; //是否顯示橫行網格/*******************紅色直線創建并設置***************************/Steema.TeeChart.Styles.Line l_lineRed = new Steema.TeeChart.Styles.Line(); //直線l_lineRed.Title = "直線red"; //標題l_lineRed.Color = Color.FromArgb(250, 50, 0); //直線顏色//line1.ColorEach = true; //直線使用所有顏色l_lineRed.ShowInLegend = true; //是否顯示直線標題 true/false 默認為truel_lineRed.Pointer.Visible = true; //顯示端點l_lineRed.Pointer.Style = Steema.TeeChart.Styles.PointerStyles.Sphere; //設置端點樣式chartMove.Series.Add(l_lineRed); //添加直線/*******************綠色直線創建并設置*****************************/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);/*******************添加鼠標監聽,標記提示*************************/Steema.TeeChart.Tools.MarksTip l_marks = new Steema.TeeChart.Tools.MarksTip(); //創建標記提示對象l_marks.Style = Steema.TeeChart.Styles.MarksStyles.XY; //顯示信息設為X YchartMove.Tools.Add(l_marks);l_marks.MouseDelay = 200; //設置延時時間,注意必須在Add(l_marks)后,否則會報錯l_marks.HideDelay = 1500;}/// <summary> /// 子線程執行的方法 /// </summary> protected void ThreadRun() {while (true){if (!m_thSwitch){Thread l_thThis = Thread.CurrentThread; //如果m_thSwitch為false,則銷毀當前線程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(); //隨機數種子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")); //打印數據添加顯示前系統時間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")); //打印數據添加顯示后系統時間}} }private bool m_thSwitch = false; //用于判斷線程是開啟還是關閉/// <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); //創建子線程繪制圖表數據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; //關閉線程 }

返回頂部

5.1.1 不同條件實現效果

  • 以下數據皆為測試數據中隨機抽取。

  • 測試條件1: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(帶端點)。

    • 顯示前:55:19:646
      顯示后:55:20:055

      消耗:409 毫秒

    • 顯示前:55:20:056
      顯示后:55:20:457

      消耗:401毫秒

    • 顯示前:55:20:458
      顯示后:55:20:865

      消耗:407 毫秒

  • 測試條件2: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(不帶端點)

    • 顯示前:00:10:464
      顯示后:00:10:586

    消耗:122 毫秒

    • 顯示前:00:10:586
      顯示后:00:10:711

      消耗:125 毫秒

    • 顯示前:00:10:711
      顯示后:00:10:832

      消耗:121 毫秒

  • 測試條件3: 同時顯示兩路數據、每路5000個數據點,共10000個數據點(帶端點)。

    • 顯示前:04:39:917
      顯示后:04:40:123

      消耗:206 毫秒

    • 顯示前:04:40:123
      顯示后:04:40:338

      消耗:215 毫秒

    • 顯示前:04:40:338
      顯示后:04:40:545

      消耗:207 毫秒

  • 測試條件4: 同時顯示兩路數據、每路5000個數據點,共10000個數據點(不帶端點)。

    • 顯示前:09:20:054
      顯示后:09:20:118

      消耗:64 毫秒

    • 顯示前:09:20:118
      顯示后:09:20:179

      消耗:61毫秒

    • 顯示前:09:20:179
      顯示后:09:20:240

      消耗:61毫秒

  • 測試條件5: 同時顯示兩路數據、每路1000個數據點,共2000個數據點(帶端點)。

    • 顯示前:13:02:957
      顯示后:13:03:005

      消耗:48 毫秒

    • 顯示前:13:03:005
      顯示后:13:03:055

      消耗:50 毫秒

    • 顯示前:13:03:055
      顯示后:13:03:100

      消耗:45 毫秒

  • 測試條件6: 同時顯示兩路數據、每路1000個數據點,共2000個數據點(帶端點)。

    • 顯示前: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繪圖效率測試結果

  • 根據上方幾組測試數據得出以下幾點結論:
    • 相同數據量下,不帶端點比帶端點繪制效率高3倍左右。
    • TeeChart.dll繪圖效率與數據量呈線性關系。
    • 根據20幀左右為肉眼感覺的流暢度,帶端點繪制一次大概最多繪制總量2000個數據,不帶端點一次大概最多繪制總量6000個數據。

返回頂部

5.2 TeeChart8.ocx實現

/// <summary> /// 將Color的RGB值轉換為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基本參數設置 /// </summary> private void SetChart() {/*******************圖表窗體設置********************************/axTChartMove.Header.Text.Text = "TeeChar8.ocx"; //設置tchart窗口標題axTChartMove.Axis.Left.Title.Caption = "Y軸"; //設置X軸Y軸標題axTChartMove.Axis.Bottom.Title.Caption = "X軸";axTChartMove.Axis.Left.Title.Angle = 0; //設置標題的旋轉角度axTChartMove.Aspect.View3D = false; //是否顯示3D效果axTChartMove.Axis.Left.Increment = 10; //設置Y軸最小刻度axTChartMove.Legend.CheckBoxes = true; //是否需要勾選/*******************紅色直線創建并設置***************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創建并添加直線對象axTChartMove.Series(0).Title = "直線red"; //設置線條名axTChartMove.Series(0).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設置端點的樣式形狀axTChartMove.Series(0).asLine.Pointer.HorizontalSize = 4; //設置端點寬axTChartMove.Series(0).asLine.Pointer.VerticalSize = 4; //設置端點高axTChartMove.Series(0).asLine.Pointer.Visible = true; //是否顯示端點axTChartMove.Series(0).Color = ColorToUint(Color.FromArgb(255, 0, 0)); //設置直線顏色/*******************藍色直線創建并設置*****************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創建并添加直線對象axTChartMove.Series(1).Title = "直線blue"; //設置線條名axTChartMove.Series(1).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設置端點的樣式形狀axTChartMove.Series(1).asLine.Pointer.HorizontalSize = 4; //設置端點寬axTChartMove.Series(1).asLine.Pointer.VerticalSize = 4; //設置端點高axTChartMove.Series(1).asLine.Pointer.Visible = true; //是否顯示端點axTChartMove.Series(1).Color = ColorToUint(Color.FromArgb(0, 0, 255));/*******************添加鼠標監聽,標記提示*************************/axTChartMove.Tools.Add(TeeChart.EToolClass.tcMarksTip); //標記提示axTChartMove.Tools.Items[0].asMarksTip.Style = TeeChart.EMarkStyle.smsXY; //設置提示信息顯示樣式/*******************設置鼠標縮放**********************************/Color l_cZoom = Color.FromArgb(0, 0, 0);axTChartMove.Zoom.Pen.Color = ColorToUint(l_cZoom); //設置鼠標縮放選框顏色axTChartMove.Zoom.Pen.Style = TeeChart.EChartPenStyle.psDashDot; //選框線條樣式設置 }/// <summary> /// 子線程執行的方法 /// </summary> private void ThreadRun() {while (true){if (!m_thSwitch){Thread l_thThis = Thread.CurrentThread; //如果m_thSwitch為false,則銷毀當前線程l_thThis.Abort();}else{Random l_ran = new Random(); //隨機數種子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")); //打印數據添加顯示前系統時間axTChartMove.Invoke(new Action(delegate () //通過委托在UI線程繪制圖像{axTChartMove.Series(0).AddArray(10000, l_arrRedY, l_arrX); //添加數組數據axTChartMove.SeriesList.Items[1].AddArray(10000, l_arrBlueY, l_arrX); //效果和上面相同}));Console.WriteLine("顯示后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數據添加顯示后系統時間}} }private bool m_thSwitch = false; //用于判斷線程是開啟還是關閉 /// <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); //創建子線程繪制圖表數據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; //關閉線程 }

返回頂部

5.2.1 不同條件實現效果

  • 測試條件1: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(帶端點)。

    • 顯示前:54:24:196
      顯示后:54:24:891

      消耗:695 毫秒

    • 顯示前:54:24:891
      顯示后:54:25:510

      消耗:619 毫秒

    • 顯示前:54:25:941
      顯示后:54:26:513

      消耗:572 毫秒

  • **測試條件2:**同時顯示兩路數據、每路10000個數據點,共20000個數據點(不帶端點)。

    • 顯示前:57:24:433
      顯示后:57:24:535

      消耗:102 毫秒

    • 顯示前:57:24:536
      顯示后:57:24:633

      消耗:97 毫秒

    • 顯示前:57:24:633
      顯示后:57:24:732

      消耗:99 毫秒

  • **測試條件3:**同時顯示兩路數據、每路5000個數據點,共10000個數據點(帶端點)。

    • 顯示前:01:10:577
      顯示后:01:10:781

      消耗:204 毫秒

    • 顯示前:01:10:833
      顯示后:01:11:080

      消耗:247 毫秒

    • 顯示前:01:11:080
      顯示后:01:11:334

      消耗:254 毫秒

  • **測試條件4:**同時顯示兩路數據、每路5000個數據點,共10000個數據點(不帶端點)。

    • 顯示前:04:53:350
      顯示后:04:53:421

      消耗:71 毫秒

    • 顯示前:04:53:489
      顯示后:04:53:558

      消耗:69 毫秒

    • 顯示前:04:53:558
      顯示后:04:53:626

      消耗:68 毫秒

  • **測試條件5:**同時顯示兩路數據、每路1000個數據點,共2000個數據點( 帶端點)。

    • 顯示前:08:18:860
      顯示后:08:18:900

      消耗:40 毫秒

    • 顯示前:08:18:900
      顯示后:08:18:941

      消耗:41 毫秒

    • 顯示前:08:18:941
      顯示后:08:18:981

      消耗:40 毫秒

  • **測試條件6:**同時顯示兩路數據、每路1000個數據點,共2000個數據點( 不帶端點)。

    • 顯示前: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繪圖效率測試結果

  • 根據幾組測試數據得出以下幾點結論:
    • 相同數據量下,不帶端點比帶端點繪制效率高6倍左右。
    • TeeChart8.ocx繪圖效率與數據量增長呈反比關系。
    • 根據20幀左右為肉眼感覺的流暢度,帶端點繪制一次大概最多繪制總量2500個數據,不帶端點一次大概最多繪制總量8000個數據。

返回頂部

5.3 TeeChart.WPF.dll實現

private void SetChart() {/*******************圖表窗體設置********************************/chartMove.Aspect.View3D = false; //控件3D效果chartMove.Header.Text = "WPF使用TeeChart.WPF"; //設置窗體標題chartMove.Legend.Visible = true; //圖例chartMove.Legend.Color = Color.FromRgb(100, 200, 200); //設置圖例背景顏色chartMove.Axes.Visible = true; //是否顯示坐標軸chartMove.Axes.Left.Title.Text = "Y軸"; //Y軸標題chartMove.Axes.Bottom.Title.Text = "X軸"; //X軸標題chartMove.Axes.Left.Title.Visible = true; //坐標軸標題是否可見chartMove.Axes.Left.Title.Angle = 0; //坐標軸標題旋轉角度chartMove.Axes.Left.Labels.Style = Steema.TeeChart.WPF.AxisLabelStyle.Auto;//Y軸樣式chartMove.Axes.Left.Labels.Angle = 20; //坐標軸刻度標簽旋轉角度chartMove.Axes.Bottom.Grid.Visible = true; //是否顯示網格/*******************藍色直線創建并設置*****************************/Steema.TeeChart.WPF.Styles.Line l_lineBlue = new Steema.TeeChart.WPF.Styles.Line(); //創建linel_lineBlue.Color = Color.FromRgb(0, 0, 200); //設置線顏色l_lineBlue.Title = "直線blue";l_lineBlue.Pointer.Visible = false; //設置開啟端點chartMove.Series.Add(l_lineBlue); //line添加進TChart/*******************綠色直線創建并設置***************************/Steema.TeeChart.WPF.Styles.Line l_lineGreen = new Steema.TeeChart.WPF.Styles.Line(); //創建linel_lineGreen.Color = Color.FromRgb(0, 200, 0); //設置線顏色l_lineGreen.Title = "直線green";l_lineGreen.Pointer.Visible = false;chartMove.Series.Add(l_lineGreen);/*******************添加鼠標監聽,標記提示*************************/Steema.TeeChart.WPF.Tools.MarksTip l_marks = new Steema.TeeChart.WPF.Tools.MarksTip();l_marks.Style = Steema.TeeChart.WPF.Styles.MarksStyles.XY; //設置提示信息樣式l_marks.MouseAction = Steema.TeeChart.WPF.Tools.MarksTipMouseAction.Click; //設置觸發響應方式chartMove.Tools.Add(l_marks); }/// <summary> /// 子線程執行的方法 /// </summary> private void ThreadRun() {while (true){if (!m_thSwitch){Thread l_thThis = Thread.CurrentThread; //如果m_thSwitch為false,則銷毀當前線程l_thThis.Abort();}else{//第二種添加方式,添加數組Random l_ran = new Random(); //隨機數種子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")); //打印數據添加顯示前系統時間chartMove.Dispatcher.Invoke(new Action(delegate () //通過委托在UI線程繪制圖像{chartMove.Series[0].Add(l_arrX, l_arrBlueY); //添加數組數據chartMove.Series[1].Add(l_arrX, l_arrGreenY);}));Console.WriteLine("顯示后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數據添加顯示后系統時間 }} }private bool m_thSwitch = false; //用于判斷線程是開啟還是關閉/// <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); //創建子線程繪制圖表數據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; //關閉線程 }

返回頂部

5.3.1 不同條件實現效果

  • 測試條件1: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(帶端點)。

    • 顯示前: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 毫秒

  • 測試條件2: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(不帶端點)。

    • 顯示前: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 毫秒

  • 測試條件3: 同時顯示兩路數據、每路5000個數據點,共10000個數據點(帶端點)。

    • 顯示前: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 毫秒

  • 測試條件4: 同時顯示兩路數據、每路5000個數據點,共10000個數據點(不帶端點)。

    • 顯示前: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 毫秒

  • 測試條件5: 同時顯示兩路數據、每路1000個數據點,共2000個數據點(帶端點)。

    • 顯示前: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 毫秒

  • 測試條件6: 同時顯示兩路數據、每路1000個數據點,共2000個數據點(不帶端點)。

    • 顯示前: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繪圖效率測試結果

  • 根據幾組測試數據得出以下幾點結論:
    • 相同數據量下,不帶端點比帶端點繪制效率高2-3倍左右。
    • TeeChart.WPF.dll帶端點繪圖效率與數據量增長反比關系,不帶端點繪圖效率與數據量增加呈正比關系。
    • 根據20幀左右為肉眼感覺的流暢度,帶端點繪制一次大概最多繪制總量1500個數據,不帶端點一次大概最多繪制總量2500個數據。
    • 大概率出現某一組數據繪制失敗的情況,且與數據量無關。

返回頂部

6、Add-數據添加函數解析

  • 概述: add函數無論是 public int Add(double x, double y) 還是 public void Add(Array xValues, Array yValues) 都是異步執行函數,并不參與圖表數據的繪制。

  • 步驟:

    • 使用ILSpy反編譯工具打開編譯后的可執行文件,找到使用到添加數據的函數。

    • 點擊Add,找到函數實現位置。

      • 可以看出,前面if中都是在將數組數據添加給控件,最后調用Invalidate()函數,此函數的主要功能是使控件的特定區域無效并向控件發送繪制消息。也就是說Invalidate函數只發出重繪界面的消息,不參與繪制控件,在消息發送完后就返回,Add函數就結束了。
    • 從下列函數可看出,以點的方式添加數據每添加一個點就執行一次**Invalidate()**函數,所以添加效率會遠低于數組添加方式。

總結

以上是生活随笔為你收集整理的TeeChart基础使用手册的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。