【问题】C#chart控件绘制出实时动态曲线,波形可以随时间刷新,但是X轴网格怎么向左移动呢?
【详细描述】
(1)目前能够固定X轴时间间隔显示曲线
(2)横坐标刻度对应的轴线、以及刻度值尝试了很多方法没有实现“向左同步平移”的功能
//chart控件添加点绘制曲线的主要代码
chart1.Series[0].Points.AddXY(setX(), setY1());
if (chart1.Series[0].Points.Count > 20)
{
chart1.Series[0].Points.RemoveAt(0);
chart1.Series[0].Points.AddXY(setX(), setY1());
}
//其中,setX()和setY()是通过队列返回的X、Y坐标
private Queue<string> getX = new Queue<string>(); //存储x坐标
private Queue getY = new Queue<int>(); //存储y坐标
【谢谢各位,望不吝赐教!】
你要做的不是跟Chart费劲,你要做的是移动自己的数据
我这里介绍一个出来快10年的官方库--哎,某园子这10年基本上没干啥有用的事情。废话文章天天飞,有用的实用的一概无视。
一个10年前的实用库,而且是个成熟的库,你倒是没见他们那么积极。一个把netcore官方的命名空间改改的废物式的abp到折腾的带劲
//我这里介绍一种rx的实现
using System.Reactive.Linq;
//因为我没有你的数据源,所以我自己产生一个
//每300ms产生一个数据
//下面这句就模拟了一个每隔300毫秒就产生一个long值的,并且带有时间戳的数据
var mokedata = Observable.Interval(TimeSpan.FromMilliseconds(300))
.Timestamp(); //前面一个只是数字,没有时间戳,我们加一个时间戳
//我这个是控制台,我就不演示如何刷新数据了
//我这里展示如何使用rx的操作符在连续数据源上进行移动窗口开窗操作
//我这里演示的是按时间开窗,对于chart来说,我们一般是按时间刷新,所以我这里也选用按时间开窗
mokedata.Buffer(TimeSpan.FromSeconds(1), TimeSpan.FromMilliseconds(500)) //含义为每次前移500毫秒返回移动后缓存1内值
.Subscribe(p =>
{
Console.WriteLine("----------------窗口期数据开始------------");
Console.WriteLine(string.Join(Environment.NewLine, p.Select(c=>$"{c.Timestamp}:{c.Value}")));
Console.WriteLine("----------------窗口期数据结束------------");
}
);
//你会看到的结果是每1秒给你一个List,同时这个list也包含上一个list的部分数据,因为窗口是平滑移动的
//对于chart来说,我们一方面不想频繁刷新他,另一方面我们想表现数据的连续性,不想数据突变,所以采用平滑移动