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. springboot~mybatis里localdatetime序列化问题

    问题起因 主要是使用mybatis作为ORM之后,返回的对象为Map,然后对于数据库的datetime,datestamp类型返回为时间戳而不是标准的时间,这个问题解决方案有两种,大叔分析一下: 在m ...

  2. python类属性用法总结

    属性的定义:python中的属性其实是普通方法的衍生. 操作类属性有三种方法: 1.使用@property装饰器操作类属性. 2.使用类或实例直接操作类属性(例如:obj.name,obj.age=1 ...

  3. jQuery获取或设置元素的宽度和高度

    jQuery获取或设置元素的宽度和高度: 可使用以下3种方法: 1,jQuery width() 和 height() 方法: 2,innerWidth() 和 innerHeight() 方法: 3 ...

  4. Java开发笔记(八十二)注解的基本单元——元注解

    Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @ ...

  5. javascript 函数后面有多个小括号f( )( )( )...

    有时我们看见js函数后面跟着多个小括号是什么意思?f( )( )( )... f()执行f函数,返回子函数 f()()执行子函数,返回孙函数 f()()()执行孙函数,返回重孙函数 ... ... 但 ...

  6. W3C 代码标准规范

    W3C通过设立领域(Domains)和标准计划(Activities)来组织W3C的标准活动,围绕每个标准计划,会设立相关的W3C工作组织(包括工作组.社区组.商务组等).W3C会根据产业界的标准需求 ...

  7. video.js 一个页面同时播放多个视频

    $(data).each(function(i, item) { // innerHTML += '<li type-id="'+item.id+'">'+ // '& ...

  8. Hacking HackDay: Albania

    概述: Name: HackDay: Albania Date release: 18 Nov 2016 Author: R-73eN Series: HackDay 下载: https://down ...

  9. (详细)华为荣耀4X CHE-TL00H的usb调试模式在哪里打开的步骤

    每当我们使用PC通过数据线链上安卓手机的时候,如果手机没有开启usb开发者调试模式,PC则没能成功读到我们的手机,有时,我们使用的一些功能较强的工具好比之前我们使用的一个工具引号精灵,老版本就需要打开 ...

  10. 什么是Docker,它可干什么?

    定义我们知道,软件依赖的环境大致包括: 1• 配置文件2• 代码3• tomcat4• JDK5• 操作系统 Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包 ...