using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using CommonLib; namespace ChartDemo
{
public partial class Form1 : Form
{ /* 涉及知识点: 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 ,定时器,定时之行相应的功能,更新数据,刷新图表。 */ private Queue<double> dataQueue = new Queue<double>();
private int curValue = ;
private int num = ;//每次删除增加几个点 public Form1()
{
Logger.Instance.WriteLog("Start InitializeComponent Form1");
InitializeComponent();
Logger.Instance.WriteLog("End InitializeComponent Form1");
} /// <summary>
/// 初始化图表
/// </summary>
private void InitChart()
{
//定义图表区域
this.chart1.ChartAreas.Clear();
ChartArea chartArea1 = new ChartArea("C1");
ChartArea chartArea12 = new ChartArea("C2");
this.chart1.ChartAreas.Add(chartArea1);
this.chart1.ChartAreas.Add(chartArea12); //定义存储和显示点的容器
this.chart1.Series.Clear();
Series series1 = new Series("S1");
series1.ChartArea = "C1";
this.chart1.Series.Add(series1); //设置图表显示样式
this.chart1.ChartAreas[].AxisX.Minimum = ;
this.chart1.ChartAreas[].AxisX.Maximum = ;
this.chart1.ChartAreas[].AxisX.Interval = ;
this.chart1.ChartAreas[].AxisY.Minimum = ;
this.chart1.ChartAreas[].AxisY.Maximum = ;
this.chart1.ChartAreas[].AxisY.Interval = ;
this.chart1.ChartAreas[].AxisX.MajorGrid.LineColor = System.Drawing.Color.Blue ;
this.chart1.ChartAreas[].AxisY.MajorGrid.LineColor = System.Drawing.Color.Blue;
//设置标题 this.chart1.Titles.Clear();
this.chart1.Titles.Add("S01");
this.chart1.Titles[].Text = "随机数显示";
this.chart1.Titles[].ForeColor = Color.RoyalBlue;
this.chart1.Titles[].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F); //设置图表显示样式
this.chart1.Series[].Color = Color.Red; if (Rb_Brokenline.Checked)
{
this.chart1.Titles[].Text =string.Format( "随机数 {0} 显示",Rb_Brokenline.Text);
this.chart1.Series[].ChartType = SeriesChartType.Line;
}
if (Rb_Waveform.Checked) {
this.chart1.Titles[].Text = string.Format("随机数 {0} 显示", Rb_Waveform.Text);
this.chart1.Series[].ChartType = SeriesChartType.Spline;
}
this.chart1.Series[].Points.Clear();
} //更新队列中的值
private void UpdateQueueValue()
{ if (dataQueue.Count > ) {
//先出列
for (int i = ; i < num; i++)
{
dataQueue.Dequeue();
}
}
if (Rb_Brokenline.Checked)
{
Random r = new Random();
for (int i = ; i < num; i++)
{
dataQueue.Enqueue(r.Next(, ));
}
}
if (Rb_Waveform.Checked) {
for (int i = ; i < num; i++)
{
//对curValue只取[0,360]之间的值
curValue = curValue % ;
//对得到的正玄值,放大50倍,并上移50
dataQueue.Enqueue((*Math.Sin(curValue*Math.PI / ))+);
curValue=curValue+;
}
}
} /// <summary>
/// 初始化事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_Init_Click(object sender, EventArgs e)
{
InitChart();
} /// <summary>
/// 开始事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_Start_Click(object sender, EventArgs e)
{
this.timer1.Start();
} /// <summary>
/// 停止事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_Stop_Click(object sender, EventArgs e)
{
this.timer1.Stop();
} /// <summary>
/// 定时器事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick_1(object sender, EventArgs e)
{
UpdateQueueValue();
this.chart1.Series[].Points.Clear();
for (int i = ; i < dataQueue.Count; i++)
{
this.chart1.Series[].Points.AddXY((i + ), dataQueue.ElementAt(i));
//add
//this.chart1.Series[1].Points.AddXY((i + 1), dataQueue.ElementAt(i)+1);
} } }
}

动态chart Demo的更多相关文章

  1. 基于HTML5 Canvas的3D动态Chart图表

    发现现在工业SCADA上或者电信网管方面用图表的特别多,虽然绝大部分人在图表制作方面用的是echarts,他确实好用,但是有些时候我们不能调用别的插件,这个时候就得自己写这些美丽的图表了,然而图表轻易 ...

  2. jQuery选择器之动态列表显示Demo

    显示效果: 之后全部展开: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  3. Java 动态代理 Demo

    相比于静态代理,动态代理避免了开发者编写各个繁锁的静态代理类,只需指定一组接口及目标类对象就能动态地获取代理对象. 使用动态代理的六大步骤: 1 通过实现InvocationHandler接口来自定义 ...

  4. HttpInvoker客户端动态调用Demo

    private static <T> T getHttpInvokerService(String serverUrl, Class<T> serviceInterface) ...

  5. JDK动态代理Demo代码,进一步学习分析

    import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflec ...

  6. 【译】用 Chart.js 做漂亮的响应式表单

    数据包围着我们.虽然搜索引擎和其他应用都对基于文本方式表示的数据偏爱有加,但人们发现可视化是更容易理解的一种方式.今年初,SitePoint 发表了 Aurelio 的文章< Chart.js简 ...

  7. 一款开源且功能强大的C#甘特图控件.NET Winforms Gantt Chart Control

    甘特图在项目管理中非常重要,甘特图的思想比较简单,即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间.它直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比.管理 ...

  8. Web移动端页面 --响应式和动态REM

    响应式 什么是响应式页面呢? 顾名思义响应式页面就是能做出响应的页面,它的页面效果不是定死的,会随着用户的改变而改变. 如何着手响应式有以下几个思考的方向 找一份设计图 使用Media Query 隐 ...

  9. spring 动态代理

    突然想到AOP,就简单回忆一下动态代理.1.什么是动态代理? 假如有个用户有增删该查4个方法,如果要对用户操作后进行日志记录,可能会有人说直接在增删改查后做日志记录就行. 一旦我想在用户操作之前加一个 ...

随机推荐

  1. 知识小罐头07(tomcat8请求源码分析 下)

    感觉最近想偷懒了,哎,强迫自己也要写点东西,偷懒可是会上瘾的,嘿嘿!一有写博客的想法要赶紧行动起来,养成良好的习惯. ok,继续上一篇所说的一些东西,上一篇说到Connector包装了那两个对象,最后 ...

  2. .NET Core Session的简单使用

    前言 在之前的.NET 里,我们可以很容易的使用Session读取值.那今天我们来看看 如何在.NET Core中读取Session值呢? Session 使用Session之前,我们需要到Start ...

  3. .Net Core的Log方式:Serilog+Kibana

    前言 Serilog,支持对象,把log数据序列化成Json,好用方便,容易拓展.Github: https://github.com/handsomeyao77/serilog-sinks-elas ...

  4. SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  5. pm2通过配置文件部署nodejs代码到服务器

    一.pm2文档地址: http://pm2.keymetrics.io/ 二.在本地项目下新建ecosystem.config.js文件,并且推送到远端(记得node_modules这个文件夹也得推送 ...

  6. asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦

    学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的.目前在公司实习,也见过公司几个项目的代码了.对 ...

  7. 10分钟 在linux里创建.net core helloworld控制台程序

    官方教程 安装linux https://www.cnblogs.com/LittleFeiHu/p/9749455.html 第一步 :选择和你本机适用的Linux版本,我这里用的是18.04. 第 ...

  8. jQuery(三)、属性、CSS

    jQuery设置了很多为标签进行属性的操作,比如添加.删除. 一 .属性 1 attr(name | properties | [key, value | fn]) 设置或返回被选择的属性值. 参数: ...

  9. Biorhythms(poj1006+中国剩余定理)

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 117973   Accepted: 37026 Des ...

  10. Nginx + Keepalived实现应用高可用负载均衡功能

    说明:此处仅介绍 Keepalived 实现nginx负载均衡器的高可用,关于nginx介绍和负载均衡实现可查看我的另两篇博文 Nginx负载均衡 和 Nginx配置了解 应用背景:实现高可用,避免单 ...