基于mschart控件,绘制工控采集类曲线,可对图像进行缩放,拖动滚动条显示放大后的图像,并动态显示曲线上的数值点
在工控、采集、测试类项目中经常需要对采集接收回来的数据进行图像、曲线显示,本人在项目中经常要求进行曲线绘图,而最快的曲线绘制方式就是采用IDE自带的绘图插件,本将对VS2015自带的chart控件,绘制实时温度时间曲线或历史温度时间曲线进行简单介绍,不足之处请发邮件至376851329@qq.com指正。言归正传,下面开始说明具体步骤:

1、在VS2015 IDE中创建WINFORM工程,并添加chart控件,并删除chart控件中初始化的serials类、ChartArea类、legneds类中初始化的一些serials,chartarea、legned的初始变量
2、利用代码初始化chart控件,现将chart控件命名为mychart;代码中将图像初始化为时间温度曲线类型,初始化代码如下:

//初始化Chart控件样式public void InitializeChart(){#region 设置图表的属性//图表的背景色myChart.BackColor = Color.FromArgb(211, 223, 240);//图表背景色的渐变方式myChart.BackGradientStyle = GradientStyle.TopBottom;//图表的边框颜色myChart.BorderlineColor = Color.FromArgb(26, 59, 105);//图表边框线条样式myChart.BorderlineDashStyle = ChartDashStyle.Solid;//图表边框线条宽度myChart.BorderlineWidth = 2;//图表边框的皮肤myChart.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;#endregion#region 设置图表表头//图表表头Title title = new Title();//标题title.Text = "热敏曲线";//标题字体title.Font = new System.Drawing.Font("Microsoft Sans Serif", 12, FontStyle.Bold);//字体颜色title.ForeColor = Color.FromArgb(26, 59, 105);//标题阴影颜色title.ShadowColor = Color.FromArgb(32, 0, 0, 0);//标题阴影偏移量title.ShadowOffset = 3;//添加标题myChart.Titles.Add(title);#endregion#region 设置图表区域属性//图标区名字chartarea = new ChartArea("Default");//背景色chartarea.BackColor = Color.FromArgb(64, 165, 191, 228);//背景色渐变方式chartarea.BackGradientStyle = GradientStyle.LeftRight;//渐变和阴影的辅助背景色chartarea.BackSecondaryColor = Color.White;//边框颜色chartarea.BorderColor = Color.FromArgb(64, 64, 64, 64);//阴影颜色chartarea.ShadowColor = Color.Transparent;//设置X轴和Y轴的线条颜色与宽度chartarea.AxisX.LineColor = Color.FromArgb(64, 64, 64, 64);chartarea.AxisX.LineWidth = 1;chartarea.AxisY.LineColor = Color.FromArgb(64, 64, 64, 64);chartarea.AxisY.LineWidth = 1;//设置X轴Y轴标题chartarea.AxisX.Title = "时间";chartarea.AxisY.Title = "温度";//设置X轴的最小值为第一个点的X坐标值chartarea.AxisX.Minimum = DateTime.Now.ToOADate();//设置X轴的显示类型及显示方式chartarea.AxisX.Interval = 0; //设置为0表示由控件自动分配chartarea.AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;chartarea.AxisX.IntervalType = DateTimeIntervalType.Minutes;chartarea.AxisX.LabelStyle.IsStaggered = true;chartarea.AxisX.LabelStyle.Format = "yyyy-MM-dd HH:mm:ss";//设置文本角度//chartArea.AxisX.LabelStyle.Angle = 45;//设置文本自适应chartarea.AxisX.IsLabelAutoFit = true;//设置网格线的样式、颜色和宽度chartarea.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;chartarea.AxisX.MajorGrid.LineWidth = 1;chartarea.AxisX.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64);chartarea.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;chartarea.AxisY.MajorGrid.LineWidth = 1;chartarea.AxisY.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64);//设置绘图区域可以缩放        //chartarea.AxisX.ScrollBar.LineColor = System.Drawing.Color.Black;       //设置滚动条在图像内还是在图像外//chartarea.AxisX.ScrollBar.Size = 10;                                //设置滚动条宽度大小chartarea.AxisX.ScrollBar.IsPositionedInside = false;            //设置滚动条在图像内还是在图像外chartarea.AxisX.ScrollBar.Enabled = true;//chartarea.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.ResetZoom;chartarea.AxisX.ScaleView.SmallScrollMinSize = 1;chartarea.AxisX.ScaleView.SmallScrollMinSizeType = DateTimeIntervalType.Seconds;          //此项设置将可以采用MSChart图形中鼠标点击移动滚动条功能chartarea.CursorX.IsUserEnabled = true;chartarea.CursorX.IsUserSelectionEnabled = true;chartarea.CursorX.Interval = 0;chartarea.CursorX.IntervalOffset = 0;chartarea.CursorX.IntervalType = DateTimeIntervalType.Minutes;chartarea.AxisX.ScaleView.Zoomable = true;      //启用用户缩放数据//添加绘图区域myChart.ChartAreas.Add(chartarea);#endregion#region 图例及曲线标签位置Legend legend = new Legend();legend.Alignment = StringAlignment.Center;legend.Docking = Docking.Right;//添加图例及曲线标签位置myChart.Legends.Add(legend);#endregion}

以上代码段中完成了对图像绘制区域的外观设置,以及曲线缩放功能设置

3、添加并设置曲线

//设置Series曲线样式public Series SetSeriesStytle(int i){//创建曲线plot_series[i] = new Series(string.Format("第{0}条数据", i + 1));//Series曲线类型plot_series[i].ChartType = SeriesChartType.Line;//设置Series的边框颜色plot_series[i].BorderColor = Color.FromArgb(180, 26, 59, 105);//设置Series曲线宽度plot_series[i].BorderWidth = 3;//设置线条阴影颜色plot_series[i].ShadowColor = Color.Black;//线条阴影宽度plot_series[i].ShadowOffset = 2;//是否显示阴影数据说明plot_series[i].IsVisibleInLegend = true;//线条上的数据点是否有数据显示plot_series[i].IsValueShownAsLabel = false;//线条上数据点的标志类型plot_series[i].MarkerStyle = MarkerStyle.None;//线条数据点大小plot_series[i].MarkerSize = 3;//线条颜色switch(i){case 0:plot_series[i].Color = Color.FromArgb(220, 65, 140, 240);plot_series[i].ChartType = SeriesChartType.StepLine;break;case 1:plot_series[i].Color = Color.FromArgb(220, 224, 64, 10);break;case 2:plot_series[i].Color = Color.FromArgb(220, 120, 150, 20);plot_series[i].ChartType = SeriesChartType.Stock;break;default:break;}return plot_series[i];}

4、在MainForm构造函数中添加初始化代码

 public MainForm(){InitializeComponent();//初始化曲线this.SetSeriesStytle(0);this.SetSeriesStytle(1);this.SetSeriesStytle(2);//初始化数据data[0] = new float[1];data[1] = new float[1];data[2] = new float[1];//初始化chart控件样式InitializeChart();//界面加载函数this.Load += new EventHandler(MainForm_Load);//显示曲线上点的数据this.myChart.GetToolTipText += new EventHandler<ToolTipEventArgs>(myChart_GetToolTipText);}

5、添加以上设置消息响应函数实现

 public void MainForm_Load(object sender, EventArgs e){DateTime dt = DateTime.Now;data[0][0] = 0;data[1][0] = 0;data[2][0] = 0;plot_series[0].Points.AddXY(dt, data[0][0]);this.myChart.Series.Add(plot_series[0]);plot_series[1].Points.AddXY(dt, data[1][0]);this.myChart.Series.Add(plot_series[1]);plot_series[2].Points.AddXY(dt, data[2][0]);this.myChart.Series.Add(plot_series[2]);timer_RealGraph.Enabled = true;}//显示曲线上的数值点public void myChart_GetToolTipText(object sender,ToolTipEventArgs e){if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint){int i = e.HitTestResult.PointIndex;DataPoint dp = e.HitTestResult.Series.Points[i];e.Text = string.Format("时间:{0};数值:{1:F1} ", DateTime.FromOADate(dp.XValue), dp.YValues[0]);}}

6、添加定时器控件,实现动态曲线绘制

//实时动态绘图private void timer_RealGraph_Tick(object sender, EventArgs e){Random random = new Random();DateTime dt = DateTime.Now;for (int j = 0; j < 3; j++){data[j][0] = random.Next(-10, 10);plot_series[j].Points.AddXY(dt, data[j][0]);}while (plot_series[0].Points.Count > 1000){foreach (Series series in myChart.Series){series.Points.RemoveAt(0);}}chartarea.AxisX.Minimum = plot_series[0].Points[0].XValue;chartarea.AxisX.Maximum = DateTime.Now.ToUniversalTime().AddHours(10).ToOADate();myChart.Invalidate();}

总结:以上就是绘制温度时间动态曲线,并进型缩放的详细步骤,工程中是在定时器下进行绘制的,在线程中绘制是同样的道理,只需将定时器部分代码改为线程实现即可。

关键点:在进行缩放设置时,以下代码是关键部分,在msdn中都做了详细的说明,可以查看下msdn中的说明,我在代码中也做了详细注释,可供参考

chartarea.AxisX.ScrollBar.IsPositionedInside = false;            //设置滚动条在图像内还是在图像外chartarea.AxisX.ScrollBar.Enabled = true;chartarea.AxisX.ScaleView.SmallScrollMinSize = 1;chartarea.AxisX.ScaleView.SmallScrollMinSizeType = DateTimeIntervalType.Seconds;          //此项设置将可以采用MSChart图形中鼠标点击移动滚动条功能chartarea.CursorX.IsUserEnabled = true;chartarea.CursorX.IsUserSelectionEnabled = true;chartarea.CursorX.Interval = 0;chartarea.CursorX.IntervalOffset = 0;chartarea.CursorX.IntervalType = DateTimeIntervalType.Minutes; chartarea.AxisX.ScaleView.Zoomable = true;      //启用用户缩放数据

此种方案绘制的温度时间采集曲线,可应用于大多数项目的需求,可以将代码直接应用于项目中,项目运行图片如下所示

最后附上工程源代码

基于mschart控件,绘制工控采集类曲线,可对图像进行缩放,拖动滚动条显示放大后的图像相关推荐

  1. 使用.net 的Chart控件绘制曲线图

    System.Windows.Forms.DataVisualization.Charting 命名空间 System.Windows.Forms.DataVisualization.Charting ...

  2. 基于C#的GIS开发20210426之类库同名类、制作winform控件、建立控件之间的关联、自己制作控件、自己控件引入项目、显示磁盘文件夹、磁盘文件与picturebox建立关系、图像拉伸

    C#知识点与控件的制作 一.C#中多个类库中有同名类,区分问题 二.制作最简单的winform控件 1.拖动加载 事件代理 筛选器 2.显示属性.事件,及其修改 常见控件属性介绍 窗体常用的方法 常见 ...

  3. 一步一步实现自己的模拟控件(6)——控件树及控件区域

    控件树 一步一步实现自己的模拟控件(1)中的图上我们可以看到,我们的控件体系其实就是一个控件树.每一个窗口关联一个根控件,所有控件都在这个根控件之下,父控件包容并管理子控件,那么我们的Widget就应 ...

  4. Python Tkinter教程(二)——Label控件、Frame控件、Button控件的完整参数和所有方法及详细用法

    >>>[上节回顾:tkinter编程基本步骤.窗口基本属性及Toplevel控件的使用]<<< Python Tkinter教程(二)         这篇博客将详 ...

  5. C++ 主程序中打开子程序窗口隐藏,操作控件 遍历窗口控件句柄EnumChildWindows();获取其他程序进度条数据 操作选择框 按钮点击

    1.线程启动子程序  ShowWindow(hWnd, SW_SHOW)显示 ShowWindow(hwnd, SW_HIDE);隐藏 system_hide(L"Odin3.exe&quo ...

  6. 学习笔记---母板页、用户控件、第三方控件及视图状态管理

    一.母版页 在制作页面的过程中, 多个页面往往具有相同的页面Header和页面Footer, 多个页面只是在中间部分有变化. 那么我们完全可以避免在每个页面中都写一遍页头和页尾的代码, 这种技术就是母 ...

  7. scenebuilder各控件属性介绍_C#控件及常用设计整理(三)

    C#控件及常用设计整理(三) 12.CheckedListBox 控件 CheckedListBox控件又称复选列表框,它扩展了ListBox控件,它几乎能完成列表框可以完成的所有任务,并且还可以在列 ...

  8. 百度步行导航加poi搜索android,【百度地图】带地图显示控件、导航控件、POI查找控件...

    标题: [完全开源]百度地图Web service API C#.NET版,带地图显示控件.导航控件.POI查找控件 概述: 源代码主要包含三个项目,BMap.NET.BMap.NET.Windows ...

  9. android让一个控件跟上面控件对其,学个明白--Android控件架构

    Android控件架构 1.什么是View? View是Android中所有控件的基类.View是界面层的控件的一种抽象,它代表了一个控件.在Android中每个控件都会在界面中占得一块矩形的区域.在 ...

最新文章

  1. @卡尔曼滤波 跑通调参
  2. Jpeg解码小结(一)
  3. lisp 线型虚实变换_绘画|虚实?国风画这叫线型变化!画线条的正确姿势,你对了吗...
  4. Linux-部署应用到生产环境Tomcat项目-全流程(图文教程)
  5. 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】
  6. java作业 景区门票
  7. Tips--解决No module named matlab.engine的问题
  8. java 等待线程结束 框架_深入理解Java多线程与并发框架——线程的状态
  9. 关于领域驱动设计与面向数据库设计
  10. CentOS搭建git服务器实测
  11. 计算机搜索栏历史记录,如何打开搜索历史记录
  12. PhantomJS not found on PATH
  13. VLIW Microprocessor Hardware Design
  14. 光标快速移动到文档尾部_在Word文档中,把光标移动到文件尾部的快捷键是__________。...
  15. 禁止ios版本上拉回弹效果
  16. 当提示“当前帐户被锁定,可能无法登录”时,如何解锁帐户?
  17. iptables ipset详解
  18. [普及练习场] 生活大爆炸版石头剪刀布
  19. AAC帧格式及编码介绍
  20. 案例分析|名创优品是如何通过精细化管理获得火速扩张的?

热门文章

  1. 计算机专业能评电子工程师吗,电子设计工程师认证
  2. html文件可以打开,asp文件打不开的原因
  3. 教材订购模块java代码实现,java毕业设计_springboot框架的教材征订系统
  4. 海思3531添加移远EC20 4G模块
  5. 【Copula】基于二元Frank-Copula函数的风光出力场景生成方法【考虑风光出力的不确定性和相关性】(Matlab代码实现)
  6. 解决Safari浏览器下载文件文件名称乱码的问题
  7. linux脚本执行mysql命令
  8. Node-包管理工具整套下载使用讲解(nvm、npm、yarn、cnpm、pnpm、nrm)
  9. 利用Word解锁注册表
  10. Java 浅拷贝、深拷贝,你知多少?