主要介绍使用C#的winform如何进行实时数据的动态加载的实例,并通过设置参考线来显示数据曲线的分布
文章目录
通过C#的winForm开发的一款实时曲线,动态显示数据,能够设置参考线

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 ChartControl
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
InitChart();
timer1.Interval = 1000;
}
///
/// 图表对象
///
Series series;
///
/// x轴最大点数
///
int xValue = 60;
///
/// 开始时间
///
DateTime sDate;
Random rand = new Random();
/*增加队列*/
Queue<double> thinkness = new Queue<double>(30) ;
Queue<double> recordTime = new Queue<double>(30);
private void InitChart()
{
series = chart1.Series[0];
//清空原来数据缓存
series.Points.Clear();
//定义图表大小尺寸
chart1.Width = Width - 90;
chart1.Height = Height - 110;
//以下按照先绘制chartArea、然后再绘制Series的步骤画图
//chartArea背景颜色
chart1.BackColor = Color.Azure;
//X轴设置
//chart1.ChartAreas[0].AxisX.Title = "时间";
chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Near;
chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;//不显示竖着的分割线
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss"; //X轴显示的时间格式,HH为大写时是24小时制,hh小写时是12小时制
chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds;//如果是时间类型的数据,间隔方式可以是秒、分、时
//chart1.ChartAreas[0].AxisX.Interval = DateTime.Parse("00:05:00").Millisecond;//间隔为5分钟
chart1.ChartAreas[0].AxisX.Interval = DateTime.Parse("00:00:02").Second;//TODO 测试--间隔为5秒
//SetAxisX(2);
//SetAxisXReal();
//Y轴设置
//chart1.ChartAreas[0].AxisY.Title = "数据点";
chart1.ChartAreas[0].AxisY.TitleAlignment = StringAlignment.Center;
chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = true;//显示横着的分割线
chart1.ChartAreas[0].AxisY.Minimum = 0;
chart1.ChartAreas[0].AxisY.Maximum = 90;
chart1.ChartAreas[0].AxisY.Interval = 20;
//Series绘制
//chart1.Series[0].LegendText = "瞬时速度";
series.ChartType = SeriesChartType.Spline;
series.XValueType = ChartValueType.DateTime;
series.IsValueShownAsLabel = true;//显示数据点的值
series.MarkerStyle = MarkerStyle.Diamond;//显示标记,菱形
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
//获取实时数据最近的60个数据
UpdateChartData();
//重新绘制曲折线图
this.chart1.Series[0].Points.Clear();
this.chart1.Series[0].Points.DataBindXY(recordTime, thinkness);
//for (int i = 0; i < thinkness.Count; i++)
//{
// this.chart1.Series[0].Points.AddXY(recordTime.ElementAt(i), thinkness.ElementAt(i));
//}
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
}
private void UpdateChartData()
{
if (thinkness.Count > 60)
{
for (int i = 0; i < 2; i++)
{
thinkness.Dequeue();
recordTime.Dequeue();
}
}
else
{
thinkness.Enqueue(rand.Next(20, 70));
recordTime.Enqueue(DateTime.Now.ToOADate());
}
}
private void ReferenceLine(double refernceValue,Chart charContor)
{
/* 绘制参考线*/
double max = refernceValue;
StripLine stripMax = new StripLine();
stripMax.Text = string.Format("最大:{0:F}", max);//展示文本
stripMax.BackColor = Color.Yellow;//背景色
stripMax.Interval = 0;//间隔
stripMax.IntervalOffset = max;//偏移量
stripMax.StripWidth = 0.001;//线宽
stripMax.ForeColor = Color.White;//前景色
stripMax.TextAlignment = StringAlignment.Near;//文本对齐方式
charContor.ChartAreas[0].AxisY.StripLines.Add(stripMax);//添加到ChartAreas中
}
private void button3_Click(object sender, EventArgs e)
{
ReferenceLine(Convert.ToDouble(textBox1.Text.Trim()), chart1);
}
}
}
改项目主要有两个重点,一、是队列的生成。二、队列绑定到chart的X轴和Y轴
参考文章搭建文章gitte源码在线体验可以注册两个号来测试演示图:一.整体介绍 介绍SignalR一种通讯模型Hub(中心模型,或者叫集线器模型),调用这个模型写好的方法,去发送消息。 内容有: ①:Hub模型的方法介绍 ②:服务器端代码介绍 ③:前端vue3安装并调用后端方法 ④:聊天室样例整体流程:1、进入网站->调用连接SignalR的方法2、与好友发送消息->调用SignalR的自定义方法 前端通过,signalR内置方法.invoke() 去请求接口3、监听接受方法(渲染消息)通过new signalR.HubConnectionBuilder().on
在Rails3.x应用程序中,我正在使用net::ssh并向远程pc运行一些命令。我想向用户的浏览器显示实时日志。比如,如果两个命令在net中运行::ssh执行即echo"Hello",echo"Bye"被传递然后"Hello"应该在执行后立即显示在浏览器中。这是代码我在rubyonrails应用程序中使用ssh连接和运行命令Net::SSH.start(@servers['local'],@machine_name,:password=>@machine_pwd,:timeout=>30)do|ssh|ssh.open_channeldo|channel|channel.requ
我想使用googlecharts创建一个如下所示的图表:GoogleChart.pie_400x200('TacoBell'=>0,'Mediterranean'=>2,'Shivas'=>5)给定一个对象Results(name,count)。如何为GoogleCharts的结构创建一个对象,如上所示?谢谢 最佳答案 从您在评论中列为@results的结果对象开始,以下应该有效:GoogleChart.pie_400x200(@results.map{|r|{r[:title]=>r[:percentage]}})
我想使用Rails3创建一个公共(public)实时聊天应用程序。我在rails2上找到了一些例子。任何人都可以告诉你一个很好的例子/教程来使用rails3开发一个实时聊天应用程序。 最佳答案 当我试图在我的Rails3应用程序中实现一个公共(public)和私有(private)聊天系统时,我遇到了几个障碍。我查看了faye、juggernaut、node.js等。最终在尝试了几种方法之后,我能够实现一个运行良好的系统:1)我开始关注Railscast260中的faye消息传递视频指南。正如DevinM所提到的,我能够快速设置一个
我正在寻找进行对数回归(对数方程的曲线拟合)的Rubygem或库。我试过statsample(http://ruby-statsample.rubyforge.org/),但它似乎没有我要找的东西。有人有什么建议吗? 最佳答案 尝试使用“statsample”gem。您可以使用类似的方法执行指数、对数、幂、正弦或任何其他变换。我希望这有帮助。require'statsample'#IndependentVariablex_data=[Math.exp(1),Math.exp(2),Math.exp(3),Math.exp(4),Ma
我正在尝试编写Ruby代码来检查我发现的特定消息上的椭圆曲线数字签名算法(ECDSA)签名here.问题是我不知道如何将公钥的八位字节字符串转换为OpenSSL::PKey::EC::Point目的。如果我用C写这个,我会把八位字节字符串传递给OpenSSL的o2i_ECPublicKey,它做的事情接近我想要的,实际上被referenceimplementation使用.但是,我搜索了sourcecodeofRuby(MRI)而且它不包含对o2i_ECPublicKey的调用,所以我不知道如何在不编写C扩展的情况下使用Ruby中的该函数。这是十六进制的八位字节字符串。它只是一个0x0
一、下载源代码打开终端,输入命令克隆仓库gitclonehttps://github.com/raulmur/DXSLAM.gitDXSLAM二、配置环境WehavetestedthelibraryinUbuntu16.04andUbuntu18.04,butitshouldbeeasytocompileinotherplatforms.C++11orC++0xCompilerPangolinOpenCVEigen3Dbow、Fbowandg2o(IncludedinThirdpartyfolder)tensorflow(1.12)作者提供了一个脚本build.sh来编译Thirdparty目
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭8年前。Improvethisquestion我刚开始使用Ruby/Rails,想知道Rails开发人员使用什么在Rails站点上提供报告和/或图表。在ASP.NET中,我使用DevExpress中的工具,但我对Rails生态系统的了解还不够,无法知道哪些工具可用。任何见解将不胜感激。
问题有没有什么方法可以在不始终显示工具提示的情况下为Chart.js气泡图中的单个气泡添加标签?背景图表数据用于可视化我们的项目积压工作。有关每个项目的其他详细信息,即项目名称,都在一个表中。我们之前使用的是谷歌图表,只是在气泡上包含了表格中的行号,这样您就可以进行匹配。使用Chart.js,我只能得到气泡和工具提示。我已经查看了以下相关问题,但他们建议的解决方案需要始终显示工具提示。我在工具提示中获得了更多信息,并且一直显示它们会使图表变得非常困惑。Canindividualbubblesinachartjsbubblecharthavelabels?Howtoshowtooltip
有什么方法可以在React应用程序中使用GoogleCharts吗?我找到了react-google-charts我已经开始工作了,但它似乎缺少很多GoogleCharts的API,或者至少没有记录。我也有点害羞地在生产中使用NPM统计数据显示在过去一天只有~400次下载的东西。但是,我无法在NPM上单独找到GoogleCharts,也无法像我最初预期的那样简单地从“google-charts”导入图表。我的下一个想法是看看是否有办法将库作为全局变量导入。1)我该怎么做2)如果可能的话,我如何将它包含在像import{Line}from'???'这样的react组件中