C# 實時折線圖,波形圖

来源:http://www.cnblogs.com/hsiang/archive/2017/01/02/6242641.html
-Advertisement-
Play Games

此Demo是採用VS自帶的Chart圖表控制項,製作實時動態顯示的折線圖,和波形圖。 涉及到知識如下: Chart 控制項,功能強大,可以繪製柱狀圖,折線圖,波形圖,餅狀圖,大大簡化了對圖的開發與定製。 Chart控制項的相關概念: ChartArea,表示圖表區域,一個Chart可以繪製多個ChartA ...


此Demo是採用VS自帶的Chart圖表控制項,製作實時動態顯示的折線圖,和波形圖。

涉及到知識如下:

  • Chart 控制項,功能強大,可以繪製柱狀圖,折線圖,波形圖,餅狀圖,大大簡化了對圖的開發與定製。

    Chart控制項的相關概念:

    • ChartArea,表示圖表區域,一個Chart可以繪製多個ChartArea,重疊在一起。
    • Series ,表示數據序列,每個ChartArea可以有多個數據線。即,Series屬於ChartArea.
    • AxisX,AxisY,表示主坐標軸,每一個ChartArea都有對應的坐標軸,包括主坐標軸,輔坐標軸
  • Queue集合,表示先進先出的集合。

    主要有兩個方法:

    • Dequeue() 表示移除並返回位於 System.Collections.Generic.Queue<T> 開始處的對象。
    • Enqueue() 表示將對象添加到 System.Collections.Generic.Queue<T> 的結尾處。
  • Timer ,定時器,定時之行相應的功能,更新數據,刷新圖表。

-----------------------------------------------------------------------------------------------------------

效果圖如下:

折線圖【折線圖,是取[0,100]之間的隨即數進行填充】:

波形圖【波形圖,是取正玄值,並放大50倍,然後上移50】

代碼如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using System.Windows.Forms.DataVisualization.Charting;
 10 
 11 namespace WindowsFormsApplication1
 12 {
 13     public partial class RealChart : Form
 14     {
 15         private Queue<double> dataQueue = new Queue<double>(100);
 16 
 17         private int curValue = 0;
 18 
 19         private int num = 5;//每次刪除增加幾個點
 20 
 21         public RealChart()
 22         {
 23             InitializeComponent();
 24         }
 25 
 26         /// <summary>
 27         /// 初始化事件
 28         /// </summary>
 29         /// <param name="sender"></param>
 30         /// <param name="e"></param>
 31         private void btnInit_Click(object sender, EventArgs e)
 32         {
 33             InitChart();
 34         }
 35 
 36         /// <summary>
 37         /// 開始事件
 38         /// </summary>
 39         /// <param name="sender"></param>
 40         /// <param name="e"></param>
 41         private void btnStart_Click(object sender, EventArgs e)
 42         {
 43             this.timer1.Start();
 44         } 
 45         
 46         /// <summary>
 47         /// 停止事件
 48         /// </summary>
 49         /// <param name="sender"></param>
 50         /// <param name="e"></param>
 51         private void btnStop_Click(object sender, EventArgs e)
 52         {
 53             this.timer1.Stop();
 54         }
 55 
 56         /// <summary>
 57         /// 定時器事件
 58         /// </summary>
 59         /// <param name="sender"></param>
 60         /// <param name="e"></param>
 61         private void timer1_Tick(object sender, EventArgs e)
 62         {
 63             UpdateQueueValue();
 64             this.chart1.Series[0].Points.Clear();
 65             for(int i=0;i<dataQueue.Count;i++){
 66                 this.chart1.Series[0].Points.AddXY((i+1), dataQueue.ElementAt(i));
 67             }
 68         } 
 69         
 70         /// <summary>
 71         /// 初始化圖表
 72         /// </summary>
 73         private void InitChart() {
 74             //定義圖表區域
 75             this.chart1.ChartAreas.Clear();
 76             ChartArea chartArea1 = new ChartArea("C1");
 77             this.chart1.ChartAreas.Add(chartArea1);
 78             //定義存儲和顯示點的容器
 79             this.chart1.Series.Clear();
 80             Series series1 = new Series("S1");
 81             series1.ChartArea = "C1";
 82             this.chart1.Series.Add(series1);
 83             //設置圖表顯示樣式
 84             this.chart1.ChartAreas[0].AxisY.Minimum = 0;
 85             this.chart1.ChartAreas[0].AxisY.Maximum =100;
 86             this.chart1.ChartAreas[0].AxisX.Interval = 5;
 87             this.chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;
 88             this.chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;
 89             //設置標題
 90             this.chart1.Titles.Clear();
 91             this.chart1.Titles.Add("S01");
 92             this.chart1.Titles[0].Text = "XXX顯示";
 93             this.chart1.Titles[0].ForeColor = Color.RoyalBlue;
 94             this.chart1.Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
 95             //設置圖表顯示樣式
 96             this.chart1.Series[0].Color = Color.Red;
 97             if (rb1.Checked)
 98             {
 99                 this.chart1.Titles[0].Text =string.Format( "XXX {0} 顯示",rb1.Text);
100                 this.chart1.Series[0].ChartType = SeriesChartType.Line;
101             }
102             if (rb2.Checked) {
103                 this.chart1.Titles[0].Text = string.Format("XXX {0} 顯示", rb2.Text);
104                 this.chart1.Series[0].ChartType = SeriesChartType.Spline;
105             }
106             this.chart1.Series[0].Points.Clear();
107         }
108         
109         //更新隊列中的值
110         private void UpdateQueueValue() {
111             
112             if (dataQueue.Count > 100) {
113                 //先出列
114                 for (int i = 0; i < num; i++)
115                 {
116                     dataQueue.Dequeue();
117                 }
118             }
119             if (rb1.Checked)
120             {
121                 Random r = new Random();
122                 for (int i = 0; i < num; i++)
123                 {
124                     dataQueue.Enqueue(r.Next(0, 100));
125                 }
126             }
127             if (rb2.Checked) {
128                 for (int i = 0; i < num; i++)
129                 {
130                     //對curValue只取[0,360]之間的值
131                     curValue = curValue % 360;
132                     //對得到的正玄值,放大50倍,並上移50
133                     dataQueue.Enqueue((50*Math.Sin(curValue*Math.PI / 180))+50);
134                     curValue=curValue+10;
135                 }
136             }
137         }
138     }
139 }
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文向大家介紹瞭如何運用C#來創建、安裝、卸載、調試Windows Service程式。有需要的可以參考下,希望對大家有所幫助。 ...
  • 網上看到的很多winform窗體圓角設計代碼都比較累贅,這裡分享一個少量代碼就可以實現的圓角。主要運用了System.Drawing.Drawing2D。 效果圖 代碼如下。 代碼比較簡單,希望有所幫助。 ...
  • var: 初始化必須有賦值,var i;(錯的)。 var類型的對象運行過程中不允許再更改類型。(如:var i=1; i="hello!" 會出錯) var只聲明局部變數。 dynamic: 初始化時可以不賦值。 dynamic類型的對象運行過程中可以給該類型。(如:dynamic i=1; i=... ...
  • 阿裡雲直播SDK的坑 1、直播雲沒有單獨的SDK,直播部分被封裝在CDN的相關SDK當中。 2、針對SDK,沒有相關Demo。 3、針對SDK,沒有相關的文檔說明。 4、針對SDK的說明,官網上的說明與源碼裡面的說明完全不一致,初始化 與源代碼文檔中的 完全不一致。 5、針對SDK沒有封裝哪些是常用 ...
  • hello ...
  • 本文詳細介紹了C#製作簡易屏保的步驟,以及筆者在學習過程中的一些心得,有需要的可以參考下。 ...
  • Redis 安裝 & 配置 本測試環境將在 CentOS 7 x64 上安裝最新版本的 Redis。 1. 運行以下命令安裝 Redis 如果 CentOS 上提示 wget 命令未找到,則先安裝 net-tools。 yum install net-tools 2. Redis 配置文件 1)開啟 ...
  • 一.使用背景 1. SignalR是什麼? ASP.NET SignalR 是為 ASP.NET 開發人員提供的一個庫,可以簡化開發人員將實時 Web 功能添加到應用程式的過程。實時 Web 功能是指這樣一種功能:當所連接的客戶端變得可用時伺服器代碼可以立即向其推送內容,而不是讓伺服器等待客戶端請求 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...