最近做的一个项目里用到这部分 打算记录下来 挖个坑
已填

Chart坐标轴横轴为时间,纵轴是数值
如果只是一次性绘图,那么遍历一遍数据即可
如果想连续绘制(比如按照时间更新绘制),就需要一个Timer控件来更新绘图的数据。

以下为项目代码:
GUI界面添加一个Chart和一个timer即可

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;
using System.Windows.Forms.DataVisualization.Charting;namespace chartForTest
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Init_Chart();//初始化chart组件有关属性timer1.Interval = 1000;//timer1用来更新图像,每秒增加一个点timer1.Start();//窗口初始化完成即开始绘制}private void Init_Chart(){#region chart1  chart1.Series[0].IsValueShownAsLabel = true;//让点集0在图像上显示数值chart1.Series[0].SmartLabelStyle.Enabled = true;chart1.Series[0].XValueType = ChartValueType.DateTime;//坐标轴type改为时间//去掉滚动条的按钮chart1.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.None;chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false;chart1.ChartAreas[0].AxisX.ScrollBar.Size = 20;chart1.ChartAreas[0].AxisX.ScaleView.MinSizeType = DateTimeIntervalType.Seconds;chart1.ChartAreas[0].AxisX.ScaleView.SizeType = DateTimeIntervalType.Seconds;chart1.ChartAreas[0].AxisX.ScaleView.Size = 20;chart1.ChartAreas[0].AxisX.ScaleView.MinSize = 15;chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSize = 1;chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSizeType = DateTimeIntervalType.Seconds;chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds;//这个interval可以用来修改显示间隔chart1.ChartAreas[0].AxisX.Interval = DateTime.Parse("00:00:01").Second;chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Near;chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = true;chart1.ChartAreas[0].AxisX.MajorGrid.LineWidth = 1;chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.LightGray;//显示格式为时:分:秒chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";chart1.ChartAreas[0].AxisY.IntervalAutoMode = IntervalAutoMode.VariableCount;chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.LightGray;#endregion}private void timer1_Tick(object sender, EventArgs e){//让滚动条滚动到最新位置this.chart1.ChartAreas[0].AxisX.ScaleView.Scroll(ScrollType.Last);string now = DateTime.Now.ToLongTimeString();//转换time的格式用于输出DateTime time = DateTime.Parse(now);//在点集0(serials[0])中加入新的点XY//TIP:如果你使用数组存放要绘制的点,每次绘图从上一次绘制结束的位置开始即可//不需要每次画图都从第一个点开始绘制this.chart1.Series[0].Points.AddXY(time, DateTime.Now.Second);}}
}

上测试图:

PLUS:如果你还想让Chart实现时间坐标轴的缩放怎么做?

方便起见,我这里使用滚轮上下滑动

1.需要一个修改坐标轴间隔的事件

     //记录当前的缩放位置,便于控制范围private int IntervalNow = 0;//可以使用代码控制,也可以像我这样使用固定的数组(其实这样更方便)private string[] deltas = new string[] {"00:00:01","00:00:10","00:00:30","00:01:00","00:05:00","00:10:00","00:30:00","00:45:00","01:00:00"};void myMouseWheel(object sender, MouseEventArgs e){//if(sender == ch)if (e.Delta > 0){//放大//由于之前项目有不止一个Chart,所以我这里使用了(Chart)(sender)来获取触发事件的chart对象,省去判断,你们也可以把它直接换成chart1if (((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size >= 0.5)((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size = ((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size * 0.5;if (Convert.ToInt32(((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size) >= 20){--IntervalNow;if (IntervalNow < 0)IntervalNow = 0;((Chart)(sender)).ChartAreas[0].AxisX.Interval = DateTime.Parse(deltas[IntervalNow]).Second;}else{IntervalNow = 0;((Chart)(sender)).ChartAreas[0].AxisX.Interval = DateTime.Parse(deltas[IntervalNow]).Second;}}else{if (((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size <= 100000)((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size = ((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size * 2;if (((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size >= 20){++IntervalNow;if (IntervalNow >= 9)IntervalNow = 8;((Chart)(sender)).ChartAreas[0].AxisX.Interval = DateTime.Parse(deltas[IntervalNow]).Second;}else{IntervalNow = 0;((Chart)(sender)).ChartAreas[0].AxisX.Interval = DateTime.Parse(deltas[IntervalNow]).Second;}}}

2.将Chart与缩放事件关联起来

chart1.MouseWheel += new MouseEventHandler(myMouseWheel);

3.运行试试看

最后附上带缩放控制的完整代码:

GUI界面需要的仍只是添加一个Chart和Timer即可(name分别为chart1和timer1)

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;
using System.Windows.Forms.DataVisualization.Charting;namespace chartForTest
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Init_Chart();//初始化chart组件有关属性timer1.Interval = 1000;//timer1用来更新图像,每秒增加一个点timer1.Start();//窗口初始化完成即开始绘制chart1.MouseWheel += new MouseEventHandler(myMouseWheel);}private void Init_Chart(){#region chart1  chart1.Series[0].IsValueShownAsLabel = true;//让点集0在图像上显示数值chart1.Series[0].SmartLabelStyle.Enabled = true;chart1.Series[0].XValueType = ChartValueType.DateTime;//坐标轴type改为时间//去掉滚动条的按钮chart1.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.None;chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false;chart1.ChartAreas[0].AxisX.ScrollBar.Size = 20;chart1.ChartAreas[0].AxisX.ScaleView.MinSizeType = DateTimeIntervalType.Seconds;chart1.ChartAreas[0].AxisX.ScaleView.SizeType = DateTimeIntervalType.Seconds;chart1.ChartAreas[0].AxisX.ScaleView.Size = 20;chart1.ChartAreas[0].AxisX.ScaleView.MinSize = 15;chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSize = 1;chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSizeType = DateTimeIntervalType.Seconds;chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds;//这个interval可以用来修改显示间隔chart1.ChartAreas[0].AxisX.Interval = DateTime.Parse("00:00:01").Second;chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Near;chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = true;chart1.ChartAreas[0].AxisX.MajorGrid.LineWidth = 1;chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.LightGray;//显示格式为时:分:秒chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";chart1.ChartAreas[0].AxisY.IntervalAutoMode = IntervalAutoMode.VariableCount;chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.LightGray;#endregion}private void timer1_Tick(object sender, EventArgs e){//让滚动条滚动到最新位置this.chart1.ChartAreas[0].AxisX.ScaleView.Scroll(ScrollType.Last);string now = DateTime.Now.ToLongTimeString();//转换time的格式用于输出DateTime time = DateTime.Parse(now);//在点集0(serials[0])中加入新的点XY//TIP:如果你使用数组存放要绘制的点,每次绘图从上一次绘制结束的位置开始即可//不需要每次画图都从第一个点开始绘制this.chart1.Series[0].Points.AddXY(time, DateTime.Now.Second);}//记录当前的缩放位置,便于控制范围private int IntervalNow = 0;//可以使用代码控制,也可以像我这样使用固定的数组(其实这样更方便)private string[] deltas = new string[] {"00:00:01","00:00:10","00:00:30","00:01:00","00:05:00","00:10:00","00:30:00","00:45:00","01:00:00"};void myMouseWheel(object sender, MouseEventArgs e){if (e.Delta > 0){//放大if (((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size >= 0.5)((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size = ((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size * 0.5;if (Convert.ToInt32(((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size) >= 20){--IntervalNow;if (IntervalNow < 0)IntervalNow = 0;((Chart)(sender)).ChartAreas[0].AxisX.Interval = DateTime.Parse(deltas[IntervalNow]).Second;}else{IntervalNow = 0;((Chart)(sender)).ChartAreas[0].AxisX.Interval = DateTime.Parse(deltas[IntervalNow]).Second;}}else{if (((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size <= 100000)((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size = ((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size * 2;if (((Chart)(sender)).ChartAreas[0].AxisX.ScaleView.Size >= 20){++IntervalNow;if (IntervalNow >= 9)IntervalNow = 8;((Chart)(sender)).ChartAreas[0].AxisX.Interval = DateTime.Parse(deltas[IntervalNow]).Second;}else{IntervalNow = 0;((Chart)(sender)).ChartAreas[0].AxisX.Interval = DateTime.Parse(deltas[IntervalNow]).Second;}}}}}

C#:winform使用chart控件绘制折线图,时间轴可缩放相关推荐

  1. C#chart控件绘制折线图、柱状图、饼图、雷达图

    转载来源:https://blog.csdn.net/u011854789/article/details/82946553 参考链接: http://www.cnblogs.com/winshe/a ...

  2. winform 使用chart控件画圆环图

    1如果设置圆环上的颜色,不要按着Palette的来,可以自定义 可以通过设置PaletteCustomColors来进行自定义颜色 2.如何在圆环中加字,如下图所示 可以点击打Titles进行titl ...

  3. C# WinForm开发系列之c# 通过.net自带的chart控件绘制饼图,柱形图和折线图的基础使用和扩展

    一.需要实现的目标是: 1.将数据绑定到pie的后台数据中,自动生成饼图. 2.生成的饼图有详细文字的说明. 1.设置chart1的属性Legends中默认的Legend1的Enable为false: ...

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

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

  5. c#样条曲线命令_C# chart控件绘制曲线

    标签: 在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图.柱状图什么的了. using ...

  6. 基于Winform的Chart控件的简单使用(Chart控件中的条形统计图、折线统计图、扇形统计图的简单使用)

    Chart控件集成了颇多的统计图模型,拿来即用的理念大大节省了开发的时间.下面演示最常见的三种统计图模型的使用. 效果展示: C#代码: using System; using System.Coll ...

  7. C#在chart控件中实现图上内插数据点功能

    C#的chart控件可以轻松实现数据的查看,但是我们却没法轻易地对数据进行交互式编辑,所以前期我开发了chart控件数据点的框选.删除.平移功能,后来又开发了chart控件漫游功能.在我自己进行数据处 ...

  8. iOS可复用控件之折线图

    GitHub地址:https://github.com/runThor/HTChart 可支持左右拖动.双指放大缩小操作. 学习过PNChart的源码,这里是一个最基础.很简化的折线图. 效果: 实现 ...

  9. [WinForm]Dundas Chart控件学习(附源码)

    1.Dundas公司简介 加拿大的一家公司,专业做图表展现的,很牛,据说现在被Microsoft收购了.官网地址:http://www.dundas.com/ 2.Chart基本要素 3.最简单的柱状 ...

最新文章

  1. 程序员假冒AI,印度公司竟骗取2亿元投资
  2. AIC+BIC+HQ+赤池信息量+贝叶斯信息量
  3. python写完程序保存_Python学习笔记——文件处理
  4. studio添加依赖工程方法
  5. ValueError: Program neato not found in path.
  6. 支持服务器CPU的ITX主板,Mini-ITX主板能装28核处理器,华擎推出EPC621D4I-2M主板
  7. 一个完整的gdb调试过程以及一些常用的命令
  8. 表单按钮实现 type=image
  9. 在布局空间标注的尺寸量不对_卫生间最佳布局尺寸,合理布局做到1毫米都不浪费!...
  10. linux 修I改资源限制1024,Re:如何解决1024的限制???
  11. mysql 大量数据 更改索引_一文看懂ICP原理--MySQL用索引去表里取数据的一种优化...
  12. Android GPS 取经纬度
  13. linux添加sshkey,使用SSH密钥对连接Linux实例
  14. HttpModule HttpHandler(转)
  15. 光环PMP 串讲冲刺 敏捷
  16. 项目实战:十种方法实现图像数据集降维
  17. 实现 ASP.NET Core WebApi 的版本化
  18. pcf8591简明教程 及 51单片机最大只能读到127问题解决
  19. Kotlin只是一个“网红,【面试必备】
  20. Android Base64解码失败问题

热门文章

  1. 描述符演练-02-逻辑疏理-类的装饰器
  2. linux-vim操作-查找与替换
  3. Windows 10半年成全球第二!中国悲剧了
  4. Redhat 7 Web服务器配置
  5. 请给出一个时间为O(nlgk)、用来将k个已排序链表的算法。此处n为所有输入链表中元素的总数。...
  6. Internet路由结构学习心得二:通告汇聚和具体路由影响AS入流量
  7. WebHook入门教程:快速实现自动化运维,如自动热部署、自动重启服务、自动备份数据库等等
  8. NodeJS 使用官方oracledb库连接数据库教程
  9. jdk并发包里常用的类
  10. .NET进行客户端Web开发又一利器 - Ant Design Blazor