C#動態(tài)繪制多條曲線的方法
更新時間:2022年02月17日 10:17:57 作者:weixin_46896829
這篇文章主要為大家詳細介紹了C#動態(tài)繪制多條曲線的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C#動態(tài)繪制多條曲線的具體代碼,供大家參考,具體內容如下
實時繪制多條曲線,縱軸為數值,橫軸為時間,精確到毫秒
實現效果如下:

代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace chartTest
{
? ? public partial class Form1 : Form
? ? {
? ? ? ? private int maxSize=20; ? ? //圖表顯示的數據最大數量
? ? ? ? private Queue<string> getX = new Queue<string>(); ? //存儲x坐標
? ? ? ? private Queue<Int32> getY = new Queue<int>(); ? //存儲y坐標
? ? ? ? System.Timers.Timer timer1 = new System.Timers.Timer();
? ? ? ? public Form1()
? ? ? ? {
? ? ? ? ? ? InitializeComponent();
? ? ? ? }
? ? ? ? //獲取時間軸橫坐標
? ? ? ? private string ?setX()?
? ? ? ? {
? ? ? ? ? ? string time = DateTime.Now.ToString("mm:ss.fff");
? ? ? ? ? ? /* if (getX.Count > 15)
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getX.Dequeue();
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else?
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getX.Enqueue(time);
? ? ? ? ? ? ?}*/
? ? ? ? ? ? return time;
? ? ? ? }
? ? ? ? //獲取值 縱坐標
? ? ? ? private int ?setY1()?
? ? ? ? {
? ? ? ? ? ? int y = new Random().Next(-100, 0);
? ? ? ? ? ? /* if (getY.Count > 15)
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getY.Dequeue();
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else?
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getY.Enqueue(y);
? ? ? ? ? ? ?}*/
? ? ? ? ? ? return y;
? ? ? ? }
? ? ? ? private int setY2()
? ? ? ? {
? ? ? ? ? ? int y = new Random().Next(-200, 100);
? ? ? ? ? ? /* if (getY.Count > 15)
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getY.Dequeue();
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else?
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getY.Enqueue(y);
? ? ? ? ? ? ?}*/
? ? ? ? ? ? return y;
? ? ? ? }
? ? ? ? private int setY3()
? ? ? ? {
? ? ? ? ? ? int y = new Random().Next(100, 300);
? ? ? ? ? ? /* if (getY.Count > 15)
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getY.Dequeue();
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else?
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getY.Enqueue(y);
? ? ? ? ? ? ?}*/
? ? ? ? ? ? return y;
? ? ? ? }
? ? ? ? private double setY4()
? ? ? ? {
? ? ? ? ? ? double y0 = new Random().Next(100, 300);
? ? ? ? ? ? double y = y0 * 0.1;
? ? ? ? ? ? /* if (getY.Count > 15)
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getY.Dequeue();
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else?
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?getY.Enqueue(y);
? ? ? ? ? ? ?}*/
? ? ? ? ? ? return y;
? ? ? ? }
? ? ? ? //將坐標點添加進系列進行繪圖
? ? ? ? private void paint()?
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //series1
? ? ? ? ? ? ? ? if (chart1.Series[0].Points.Count > maxSize)?
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? chart1.Series[0].Points.RemoveAt(0);
? ? ? ? ? ? ? ? ? ? chart1.Series[0].Points.AddXY(setX(), setY1());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {?
? ? ? ? ? ? ? ? ? ? chart1.Series[0].Points.AddXY(setX(), setY1());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //series2
? ? ? ? ? ? ? ? if (chart1.Series[1].Points.Count > maxSize)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? chart1.Series[1].Points.RemoveAt(0);
? ? ? ? ? ? ? ? ? ? chart1.Series[1].Points.AddXY(setX(), setY2());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? chart1.Series[1].Points.AddXY(setX(), setY2());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //series3
? ? ? ? ? ? ? ? if (chart1.Series[2].Points.Count > maxSize)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? chart1.Series[2].Points.RemoveAt(0);
? ? ? ? ? ? ? ? ? ? chart1.Series[2].Points.AddXY(setX(), setY3());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? chart1.Series[2].Points.AddXY(setX(), setY3());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //series4
? ? ? ? ? ? ? ? if (chart1.Series[3].Points.Count > maxSize)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? chart1.Series[3].Points.RemoveAt(0);
? ? ? ? ? ? ? ? ? ? chart1.Series[3].Points.AddXY(setX(), setY4());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? chart1.Series[3].Points.AddXY(setX(), setY4());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? catch
? ? ? ? ? ? { }
? ? ? ? ? ??
? ? ? ? }
? ? ? ??
? ? ? ? private void timer2_Tick(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? setX();
? ? ? ? ? ? setY1();
? ? ? ? ? ? setY2();
? ? ? ? ? ? setY3();
? ? ? ? ? ? setY4();
? ? ? ? ? ? paint(); ? ? ? ? ? ? ?//調用畫圖方法,顯示動態(tài)折線圖
? ? ? ? }
? ? ? ? private void btn_start_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? if (btn_start.Text.Equals("開始"))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? btn_start.Text = "停止";
? ? ? ? ? ? ? ? timer2.Enabled = true;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? btn_start.Text = "開始";
? ? ? ? ? ? ? ? timer2.Enabled = false;
? ? ? ? ? ? }
? ? ? ? }
? ? }
}以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

