C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照

本文源码下载地址:https://download.csdn.net/download/qq_42757964/12253382(没有积分的同学,留个邮箱,我看到后发给你们)。

因为做项目时要搜集数据量很大,不但要实时显示还要把它们每次收集到的数据留在后台里,而chart的属性又太多了,我也是扒拉了好多天才明白了一丢丢,再这就做个小Demo吧


1.简单示例(一条线):

2.数据源随着时间不断变化,进度条变化 。多条线:

3.看在整段时期内的数据大体图(消去或出现)进度条:

4.后台将时刻记录变化记录到一个txt文本里以供详细校验:

话不多说上码:

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 ChartDemo
{public partial class Form1 : Form{public Form1(){InitializeComponent();InitChart(); //chart初始化}private void button1_Click(object sender, EventArgs e){timer1.Start();}private void button2_Click(object sender, EventArgs e){timer1.Stop();}DateTime time= DateTime.Now;private void timer1_Tick(object sender, EventArgs e){//图表的操作Random ra = new Random();Series series = chart1.Series[0];Series series2 = chart1.Series[1];series.Points.AddXY(time, ra.Next(1, 50));// ra.Next(1, 50) series2.Points.AddXY(time, ra.Next(1, 50));chart1.ChartAreas[0].AxisX.ScaleView.Position = series.Points.Count - 5;//让进度条跟着数据源往前走chart1.ChartAreas[0].AxisX.ScaleView.Position = series2.Points.Count - 5;}//chart初始化private void InitChart(){Series series = chart1.Series[0];series.ChartType = SeriesChartType.Spline;Series series2 = chart1.Series[1];series2.ChartType = SeriesChartType.Spline;//重要——进度条chart1.ChartAreas[0].AxisX.ScaleView.Size = 5;//设置当数据超出x轴时让其自动显示滚动条,chart的双击事件中可加上此句chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;}//chart的点击事件private void chart1_Click_1(object sender, EventArgs e){chart1.ChartAreas[0].AxisX.ScaleView.Size = 5;chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;}}
}

下面进行详细步骤说明,感兴趣的同学可以看一下:

Chart图表:
因为项目中所用到数据量很多,需要用一个动态的图标给它显示出来。当然时刻采集到数据记录到一个txt文本里也是不错的选择。
因为C#的chart控件的属性比较多这里不对属性做过多说明,我们只讲我们用到的,如果需要可以参考这个博客:https://blog.csdn.net/qq_27825451/article/details/81305387
下面就开始吧:
首先创建一个ChartDemo.
在创建好的窗体内选择chart控件:

选着两个button一个timer(button用于控制开关,timer用于对收集到数据的实时绘制):

准备步骤做完了。

下面进入正题:
 首先对chart的两个属性有些许的认识
1、 ChartAreas属性
2、 Series属性

ChartAreas:可以理解为是一个图表的绘图区。——你可以把它当做是你要作图的那个图板。
Series :实际的绘图数据区域,实际呈现的图形形状。——你可以把它当做你在图板上要显示的那个图 (当然具体是折线还是柱状图还是其他什么形状就需要你自己再来设置它的细节属性了,这次我们主要拿曲线来说明)。

注意:如果不自己再添加绘图区域ChartArea,则所有的Series会画在同一个ChartArea。还有作为画板最重要的当然是XY轴坐标刻度说明之类的了。而作为一条数据线最重要的当然是上面的数据点了。
3,代码说明
我们先只用代码让它显示最简单一条曲线,任何属性都不用设置,很简单。
首先添加chart的引用: using System.Windows.Forms.DataVisualization.Charting;
1>在写一个chart的初始化方法:

        private void InitChart(){
//用当前的chart1取你要设置数据点的那个Series设置它的样式Series series = chart1.Series[0];//chart图表默认有一个Seriesseries.ChartType = SeriesChartType.Spline;//设置X轴的样式chart1.ChartAreas[0].AxisX.ScaleView.Size = 5; chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;}

2>双击timer控件在其点击事件里进行数据的捆绑:

  DateTime time= DateTime.Now;//获取系统时间
private void timer1_Tick(object sender, EventArgs e){//这里我们用Random随机数来模拟数据源图表的操作Random ra = new Random();
//在对应的线上绘制你想显示的数据集合(数据点)Series series = chart1.Series[0];series.Points.AddXY(time, ra.Next(1, 50));// 第一个参代表你要绑定的横坐标数据,第二个参ra.Next(1, 50) 代表你要从随机数1~50里随机取数chart1.ChartAreas[0].AxisX.ScaleView.Position = series.Points.Count - 5;   //让进度条跟着数据源往前走}

3>双击chart控件在其点击方法事件内对进度条进行设置:

//chart的点击事件private void chart1_Click_1(object sender, EventArgs e){chart1.ChartAreas[0].AxisX.ScaleView.Size = 5;chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;}

4>功能性步骤就这么多已经写完,下面在将初始化方法写入上面Form的构造方法里,在在button点击事件里写上timer的开始与结束方法即可大功告成。如图:

我们运行一下试试:

可以看到数据源跟着在不断变化着并且点击控件也可以控制进度条的显示与否。但是XY轴没有具体的要求,Series显示的是什么我们也没设置。

稍微改进下
下面我们演示如果我们想要显示多条数据线在同时变化的话应该在此基础上在做哪些改照

首先我们在chart的属性窗口找到我们要改动的两个属性——ChartAreas , Series :

ChartAreas
1, 找ChartAreas属性点开:我们会发现该属性里已经默认存在一个chart1,对,每错!这就是我们一开始用的那个“画板”,我们线就是显示在它上面。说到这你应该明白了,如果我想显示多个图表或者我还想再要一个柱形图…,就可以点击添加在建一个chartarea,在在上面操作。这里不再扩展。

2, 在找到它轴Axes属性,点开我们就能看到有关XY轴(前两个)的相关属性了:
我们这里将它们对应的title设为Time Value(X轴Y轴),并将IsMarginVisible属性设为false(不设也可以,具体功能看其对应属性介绍),当然你也可以把你要显示的轴的颜色和粗细在这里一并设置好。

Series
1, 点开series能看到已经默认存在一条series,它就是我们刚刚使用过的那条线series1(实际使用时索引的应该是series0),下面我们再来添加一个新的series2。

然后将它们(series1,2)的对应属性改为我们所需要的:
这里我们可以将IsXValueIndexed属性改为true,XValueType类型改为Time,Name命名改为我们项目中的所用名词。


属性设置完,我们在在代码里去添加对应的series对象及其对应属性(跟第一个一样):

在运行起来就是这样了:


至于用输入输出流将其记录下来就相对容易很多了,直接在绑定数据的定时器方法里写一个IO流记录文本到你指定的文件夹里就行了,这里先提一下,改天再做详细说明:
(这是我做项目中的输入输出流部分,可以先参考着看一下~)

//IO流的存储与记录/*  拖控件上去  try{using (FileStream fs = File.Open(path, filem)){                  Byte[] infor = new UTF8Encoding(true).GetBytes(time + "\t空气温度" + str_air + "\tPM2.5" + str_pm25 + "\t烟雾" + str_yanwu + "\tCO2浓度" + str_co2 + "\t光照强度" + str_sun + "\r\n");fs.Write(infor, 0, infor.Length);                   }}catch{FileStream fs = File.Open(path, FileMode.CreateNew);fs.Dispose();}

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照相关推荐

  1. C# 中添加chart 控件

    C# 中的chart 控件并不是VC编译器自带的控件,但是它拥有画图的能力,例如柱形图.饼状图.折线图,等等: 1.在网上下载mschart 的安装包:并执行安装文件: https://downloa ...

  2. 在 ASP.NET MVC 中使用 Chart 控件

    在 .NET 3.5 的时候,微软就提供了一个 Chart 控件,网络上有大量的关于在 VS2008 中使用这个控件的文章,在 VS2010 中,这个控件已经被集成到 ASP.NET 4.0 中,可以 ...

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

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

  4. 解决Asp.net中的Chart控件运行出现错误提示“ ChartImg.axd 执行子请求时出错”

    首先经过错误提示看出需要保存路径之类的,所以猜测是不是配置文件出错了.看了一下配置文件只有连接字符串的配置.后来重新把vs2010关了重新打开,又新建了一个页面,重新添加空间然后运行使用.然后再看配置 ...

  5. C# Chart控件,chart、Series、ChartArea曲线图绘制的重要属性

    原文有备份,如有错误和需要改进的地方,请不吝指正会继续修改的 8个月没写博客了- -,一来是有不想继续干开发的想法,二来是赖的写,三来还是不想总结.所以为了继续坚持自己的开发和总结的信念,总结一下C# ...

  6. C# 【已上传代码】解决chart控件缩小视图后不能回到当前视图位置问题

    C#中的chart控件,是非常适合用来绘图的.当想查看数据的细节时,可以设置chart控件的放大缩小功能,一般该功能是和滚动条一块使用的. 比如我现在想查看圆圈处的数据的细节,那么添加以下语句就可以执 ...

  7. 【ASP.NET】第八课——GridView 控件的编辑功能优化,GridView控件中嵌套DropDownList控件

    知识点:掌握 GridView 的编辑.高亮显示的功能 .GridView控件中嵌套DropDownList控件获取数据源. [ASP.NET]第七课--数据绑定和 GridView 控件的使用 重点 ...

  8. C# chart控件中游标随着鼠标移动

    chart控件中游标如何随着移动? 思路很简单,只需要在鼠标进入chart控件时,获取鼠标的位置,然后将数值赋给游标的position属性. 具体实现方法如下: 选中chart控件.F4进入属性窗口, ...

  9. C#中Chart控件的一些由浅至深的理解

    最近在做这样一个桌面应用程序,从公司后台服务器查询后,获取到设备上报的数据(每条都是字符串+JSON的形式),其中字符串里包含了设备名称.上报时间这两条信息,JSON中则包含了数据上报类型.重点关注的 ...

最新文章

  1. dnsmasq搭建简易DNS服务器
  2. Jan 09 - Number of 1 Bits; Bit Operation;
  3. 电脑键盘练习_三款神器!超越键盘飞毛腿!
  4. PGpool 编译出错
  5. 离子膜烧碱行业调研报告 - 市场现状分析与发展前景预测
  6. $ is not defined与SpringMVC访问静态资源
  7. [转]CRC8校验详细说明
  8. 求三角形【内心,外心,重心,垂心】
  9. 使用小爱同学来控制电脑关机
  10. 区分单音节,双音节和多音节
  11. js实现页面视频监控全屏
  12. android拍照保存照片方向,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...
  13. 人工智能实战2019第七次作业(黄金点) 16721088 焦宇恒
  14. MongoDB 杂事
  15. 无人驾驶或成为共享汽车真正的救星?
  16. 【H5+ Quick-cocos2dx整合】之iOS 二 集成H5+ SDK
  17. Ubuntu下使用Requests 和 lxml抓取个人主页文章
  18. 大数据进阶(二):数据可视化和分析工具推荐
  19. 著名演播艺术家艾宝良入驻讯飞阅读,人工智能助力声音传承
  20. java中 访问修饰符限制性最高的是,问:JAVA中,访问修饰符限制性最高的是( )。(选择一项)...

热门文章

  1. 基于Linux的智能家居的设计(3)
  2. 网页设置引导收藏按钮
  3. 一款开源的esp32可编程手表
  4. 数据库集群分类和介绍
  5. python三国演义人物 统计分析前20个_使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。...
  6. 《通信工程》专业术语及其缩写大全
  7. Windows下好用的工具集合
  8. 面向高校 | “云原生技术应用与实践”示范课程项目开放申报
  9. changyan main.php,zblog畅言插件不能用,代码实现安装畅言评论zblog主题安装畅言评论代码...
  10. OpenGL3.0 android环境搭建